From 8f59b63176446ffa2659ff8c342fbcead2469d8c Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 26 Apr 2025 01:24:26 +0200 Subject: [PATCH] Change quote IDs to use snowflake IDs (#34551) --- ...250425134308_quote_ids_to_timestamp_ids.rb | 19 +++++++++++++++++++ db/schema.rb | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20250425134308_quote_ids_to_timestamp_ids.rb diff --git a/db/migrate/20250425134308_quote_ids_to_timestamp_ids.rb b/db/migrate/20250425134308_quote_ids_to_timestamp_ids.rb new file mode 100644 index 0000000000..0be0aaecd2 --- /dev/null +++ b/db/migrate/20250425134308_quote_ids_to_timestamp_ids.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class QuoteIdsToTimestampIds < ActiveRecord::Migration[8.0] + def up + # Set up the media_attachments.id column to use our timestamp-based IDs. + safety_assured do + execute("ALTER TABLE quotes ALTER COLUMN id SET DEFAULT timestamp_id('quotes')") + end + + # Make sure we have a sequence to use. + Mastodon::Snowflake.ensure_id_sequences_exist + end + + def down + execute('LOCK quotes') + execute("SELECT setval('quotes_id_seq', (SELECT MAX(id) FROM quotes))") + execute("ALTER TABLE quotes ALTER COLUMN id SET DEFAULT nextval('quotes_id_seq')") + end +end diff --git a/db/schema.rb b/db/schema.rb index 0cabf8997c..194ffc178f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_04_22_085303) do +ActiveRecord::Schema[8.0].define(version: 2025_04_25_134654) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" @@ -871,7 +871,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_04_22_085303) do t.string "url" end - create_table "quotes", force: :cascade do |t| + create_table "quotes", id: :bigint, default: -> { "timestamp_id('quotes'::text)" }, force: :cascade do |t| t.bigint "account_id", null: false t.bigint "status_id", null: false t.bigint "quoted_status_id"