db: add foreign key constraints on all tables.

Add foreign key constraints on all foreign keys on all tables.

These constraints are deferrable so that they're checked at the end of
the transaction, rather at the end of the statement. This is to reduce
lock duration and to allow for cyclic relationships.

Constraints are added in one migration then validated in another so that
the entire table isn't locked against reads and writes while the foreign
key constraints are being validated.

A few tables had invalid foreign keys. Add a fix script to fix these tables:

* A couple artist versions belonged to deleted artists.
* One dmail belonged to a deleted user.
* One forum topic visit belonged to that same deleted user.
* A few dozen note versions belonged to nonexistent posts. This came
  from RaisingK moving notes to different posts years ago, back when it
  was possible for users to set a note's post ID in the API.
* Some uploads had their parent ID set to 0.
This commit is contained in:
evazion
2022-01-09 10:59:27 -06:00
parent 3814aa21b3
commit 5623b139aa
5 changed files with 846 additions and 11 deletions

View File

@@ -0,0 +1,86 @@
class AddForeignKeyConstraints < ActiveRecord::Migration[7.0]
def change
add_foreign_key :api_keys, :users, validate: false, deferrable: :deferred
add_foreign_key :artist_commentaries, :posts, validate: false, deferrable: :deferred
add_foreign_key :artist_commentary_versions, :posts, validate: false, deferrable: :deferred
add_foreign_key :artist_commentary_versions, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :artist_urls, :artists, validate: false, deferrable: :deferred
add_foreign_key :artist_versions, :artists, validate: false, deferrable: :deferred
add_foreign_key :artist_versions, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :bans, :users, validate: false, deferrable: :deferred
add_foreign_key :bans, :users, column: :banner_id, validate: false, deferrable: :deferred
add_foreign_key :bulk_update_requests, :forum_posts, validate: false, deferrable: :deferred
add_foreign_key :bulk_update_requests, :forum_topics, validate: false, deferrable: :deferred
add_foreign_key :bulk_update_requests, :users, validate: false, deferrable: :deferred
add_foreign_key :bulk_update_requests, :users, column: :approver_id, validate: false, deferrable: :deferred
add_foreign_key :comments, :posts, validate: false, deferrable: :deferred
add_foreign_key :comments, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :comments, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :comment_votes, :users, validate: false, deferrable: :deferred
add_foreign_key :comment_votes, :comments, validate: false, deferrable: :deferred
add_foreign_key :dmails, :users, column: :owner_id, validate: false, deferrable: :deferred
add_foreign_key :dmails, :users, column: :from_id, validate: false, deferrable: :deferred
add_foreign_key :dmails, :users, column: :to_id, validate: false, deferrable: :deferred
add_foreign_key :email_addresses, :users, validate: false, deferrable: :deferred
add_foreign_key :favorite_groups, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :favorites, :posts, validate: false, deferrable: :deferred
add_foreign_key :favorites, :users, validate: false, deferrable: :deferred
add_foreign_key :forum_post_votes, :forum_posts, validate: false, deferrable: :deferred
add_foreign_key :forum_post_votes, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :forum_posts, :forum_topics, column: :topic_id, validate: false, deferrable: :deferred
add_foreign_key :forum_posts, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :forum_posts, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :forum_topic_visits, :users, validate: false, deferrable: :deferred
add_foreign_key :forum_topic_visits, :forum_topics, validate: false, deferrable: :deferred
add_foreign_key :forum_topics, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :forum_topics, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :posts, :users, column: :uploader_id, validate: false, deferrable: :deferred
add_foreign_key :posts, :users, column: :approver_id, validate: false, deferrable: :deferred
add_foreign_key :posts, :posts, column: :parent_id, validate: false, deferrable: :deferred
add_foreign_key :ip_bans, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :media_metadata, :media_assets, validate: false, deferrable: :deferred
add_foreign_key :mod_actions, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :moderation_reports, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :news_updates, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :news_updates, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :notes, :posts, validate: false, deferrable: :deferred
add_foreign_key :note_versions, :posts, validate: false, deferrable: :deferred
add_foreign_key :note_versions, :notes, validate: false, deferrable: :deferred
add_foreign_key :note_versions, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :pixiv_ugoira_frame_data, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_appeals, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_appeals, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :post_approvals, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_approvals, :users, validate: false, deferrable: :deferred
add_foreign_key :post_disapprovals, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_disapprovals, :users, validate: false, deferrable: :deferred
add_foreign_key :post_flags, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_flags, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :post_replacements, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_replacements, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :post_votes, :posts, validate: false, deferrable: :deferred
add_foreign_key :post_votes, :users, validate: false, deferrable: :deferred
add_foreign_key :saved_searches, :users, validate: false, deferrable: :deferred
add_foreign_key :tag_aliases, :forum_posts, validate: false, deferrable: :deferred
add_foreign_key :tag_aliases, :forum_topics, validate: false, deferrable: :deferred
add_foreign_key :tag_aliases, :users, column: :approver_id, validate: false, deferrable: :deferred
add_foreign_key :tag_aliases, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :tag_implications, :forum_posts, validate: false, deferrable: :deferred
add_foreign_key :tag_implications, :forum_topics, validate: false, deferrable: :deferred
add_foreign_key :tag_implications, :users, column: :approver_id, validate: false, deferrable: :deferred
add_foreign_key :tag_implications, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :uploads, :posts, validate: false, deferrable: :deferred
add_foreign_key :uploads, :posts, column: :parent_id, validate: false, deferrable: :deferred
add_foreign_key :uploads, :users, column: :uploader_id, validate: false, deferrable: :deferred
add_foreign_key :users, :users, column: :inviter_id, validate: false, deferrable: :deferred
add_foreign_key :user_events, :users, validate: false, deferrable: :deferred
add_foreign_key :user_events, :user_sessions, validate: false, deferrable: :deferred
add_foreign_key :user_feedback, :users, validate: false, deferrable: :deferred
add_foreign_key :user_feedback, :users, column: :creator_id, validate: false, deferrable: :deferred
add_foreign_key :user_name_change_requests, :users, validate: false, deferrable: :deferred
add_foreign_key :user_upgrades, :users, column: :recipient_id, validate: false, deferrable: :deferred
add_foreign_key :user_upgrades, :users, column: :purchaser_id, validate: false, deferrable: :deferred
add_foreign_key :wiki_page_versions, :users, column: :updater_id, validate: false, deferrable: :deferred
add_foreign_key :wiki_page_versions, :wiki_pages, validate: false, deferrable: :deferred
end
end

View File

@@ -0,0 +1,86 @@
class ValidateForeignKeyConstraints < ActiveRecord::Migration[7.0]
def change
validate_foreign_key :api_keys, :users
validate_foreign_key :artist_commentaries, :posts
validate_foreign_key :artist_commentary_versions, :posts
validate_foreign_key :artist_commentary_versions, :users, column: :updater_id
validate_foreign_key :artist_urls, :artists
validate_foreign_key :artist_versions, :artists
validate_foreign_key :artist_versions, :users, column: :updater_id
validate_foreign_key :bans, :users
validate_foreign_key :bans, :users, column: :banner_id
validate_foreign_key :bulk_update_requests, :forum_posts
validate_foreign_key :bulk_update_requests, :forum_topics
validate_foreign_key :bulk_update_requests, :users
validate_foreign_key :bulk_update_requests, :users, column: :approver_id
validate_foreign_key :comments, :posts
validate_foreign_key :comments, :users, column: :creator_id
validate_foreign_key :comments, :users, column: :updater_id
validate_foreign_key :comment_votes, :users
validate_foreign_key :comment_votes, :comments
validate_foreign_key :dmails, :users, column: :owner_id
validate_foreign_key :dmails, :users, column: :from_id
validate_foreign_key :dmails, :users, column: :to_id
validate_foreign_key :email_addresses, :users
validate_foreign_key :favorite_groups, :users, column: :creator_id
validate_foreign_key :favorites, :posts
validate_foreign_key :favorites, :users
validate_foreign_key :forum_post_votes, :forum_posts
validate_foreign_key :forum_post_votes, :users, column: :creator_id
validate_foreign_key :forum_posts, :forum_topics, column: :topic_id
validate_foreign_key :forum_posts, :users, column: :creator_id
validate_foreign_key :forum_posts, :users, column: :updater_id
validate_foreign_key :forum_topic_visits, :users
validate_foreign_key :forum_topic_visits, :forum_topics
validate_foreign_key :forum_topics, :users, column: :creator_id
validate_foreign_key :forum_topics, :users, column: :updater_id
validate_foreign_key :posts, :users, column: :uploader_id
validate_foreign_key :posts, :users, column: :approver_id
validate_foreign_key :posts, :posts, column: :parent_id
validate_foreign_key :ip_bans, :users, column: :creator_id
validate_foreign_key :media_metadata, :media_assets
validate_foreign_key :mod_actions, :users, column: :creator_id
validate_foreign_key :moderation_reports, :users, column: :creator_id
validate_foreign_key :news_updates, :users, column: :creator_id
validate_foreign_key :news_updates, :users, column: :updater_id
validate_foreign_key :notes, :posts
validate_foreign_key :note_versions, :posts
validate_foreign_key :note_versions, :notes
validate_foreign_key :note_versions, :users, column: :updater_id
validate_foreign_key :pixiv_ugoira_frame_data, :posts
validate_foreign_key :post_appeals, :posts
validate_foreign_key :post_appeals, :users, column: :creator_id
validate_foreign_key :post_approvals, :posts
validate_foreign_key :post_approvals, :users
validate_foreign_key :post_disapprovals, :posts
validate_foreign_key :post_disapprovals, :users
validate_foreign_key :post_flags, :posts
validate_foreign_key :post_flags, :users, column: :creator_id
validate_foreign_key :post_replacements, :posts
validate_foreign_key :post_replacements, :users, column: :creator_id
validate_foreign_key :post_votes, :posts
validate_foreign_key :post_votes, :users
validate_foreign_key :saved_searches, :users
validate_foreign_key :tag_aliases, :forum_posts
validate_foreign_key :tag_aliases, :forum_topics
validate_foreign_key :tag_aliases, :users, column: :approver_id
validate_foreign_key :tag_aliases, :users, column: :creator_id
validate_foreign_key :tag_implications, :forum_posts
validate_foreign_key :tag_implications, :forum_topics
validate_foreign_key :tag_implications, :users, column: :approver_id
validate_foreign_key :tag_implications, :users, column: :creator_id
validate_foreign_key :uploads, :posts
validate_foreign_key :uploads, :posts, column: :parent_id
validate_foreign_key :uploads, :users, column: :uploader_id
validate_foreign_key :users, :users, column: :inviter_id
validate_foreign_key :user_events, :users
validate_foreign_key :user_events, :user_sessions
validate_foreign_key :user_feedback, :users
validate_foreign_key :user_feedback, :users, column: :creator_id
validate_foreign_key :user_name_change_requests, :users
validate_foreign_key :user_upgrades, :users, column: :recipient_id
validate_foreign_key :user_upgrades, :users, column: :purchaser_id
validate_foreign_key :wiki_page_versions, :users, column: :updater_id
validate_foreign_key :wiki_page_versions, :wiki_pages
end
end

View File

@@ -4744,6 +4744,662 @@ CREATE INDEX index_wiki_pages_on_updated_at ON public.wiki_pages USING btree (up
CREATE UNIQUE INDEX unique_schema_migrations ON public.schema_migrations USING btree (version);
--
-- Name: tag_aliases fk_rails_0157a2fd88; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_aliases
ADD CONSTRAINT fk_rails_0157a2fd88 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: bans fk_rails_070022cd76; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bans
ADD CONSTRAINT fk_rails_070022cd76 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: comment_votes fk_rails_0873e64a40; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comment_votes
ADD CONSTRAINT fk_rails_0873e64a40 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: uploads fk_rails_0e5f710d62; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.uploads
ADD CONSTRAINT fk_rails_0e5f710d62 FOREIGN KEY (parent_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: uploads fk_rails_127111e6ac; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.uploads
ADD CONSTRAINT fk_rails_127111e6ac FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED NOT VALID;
--
-- Name: bulk_update_requests fk_rails_1773ada54d; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bulk_update_requests
ADD CONSTRAINT fk_rails_1773ada54d FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_name_change_requests fk_rails_18d9682b1c; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_name_change_requests
ADD CONSTRAINT fk_rails_18d9682b1c FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: bans fk_rails_2234692cb1; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bans
ADD CONSTRAINT fk_rails_2234692cb1 FOREIGN KEY (banner_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: bulk_update_requests fk_rails_22b3b2a525; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bulk_update_requests
ADD CONSTRAINT fk_rails_22b3b2a525 FOREIGN KEY (forum_post_id) REFERENCES public.forum_posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: dmails fk_rails_22dbb958ad; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.dmails
ADD CONSTRAINT fk_rails_22dbb958ad FOREIGN KEY (from_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_appeals fk_rails_2794bb6745; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_appeals
ADD CONSTRAINT fk_rails_2794bb6745 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_replacements fk_rails_286111af77; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_replacements
ADD CONSTRAINT fk_rails_286111af77 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: mod_actions fk_rails_290059ebb5; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.mod_actions
ADD CONSTRAINT fk_rails_290059ebb5 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: posts fk_rails_299f071108; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.posts
ADD CONSTRAINT fk_rails_299f071108 FOREIGN KEY (uploader_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_topic_visits fk_rails_2c7f47773d; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_topic_visits
ADD CONSTRAINT fk_rails_2c7f47773d FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_posts fk_rails_2ddd2b5687; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_posts
ADD CONSTRAINT fk_rails_2ddd2b5687 FOREIGN KEY (topic_id) REFERENCES public.forum_topics(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: wiki_page_versions fk_rails_2fc7c35d5a; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.wiki_page_versions
ADD CONSTRAINT fk_rails_2fc7c35d5a FOREIGN KEY (wiki_page_id) REFERENCES public.wiki_pages(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: comments fk_rails_2fd19c0db7; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comments
ADD CONSTRAINT fk_rails_2fd19c0db7 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: api_keys fk_rails_32c28d0dc2; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.api_keys
ADD CONSTRAINT fk_rails_32c28d0dc2 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_commentary_versions fk_rails_3b1402ddb3; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_commentary_versions
ADD CONSTRAINT fk_rails_3b1402ddb3 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_replacements fk_rails_3ddcb25767; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_replacements
ADD CONSTRAINT fk_rails_3ddcb25767 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: users fk_rails_3e95061862; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.users
ADD CONSTRAINT fk_rails_3e95061862 FOREIGN KEY (inviter_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: posts fk_rails_3eb11ec3aa; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.posts
ADD CONSTRAINT fk_rails_3eb11ec3aa FOREIGN KEY (parent_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_disapprovals fk_rails_408a205f48; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_disapprovals
ADD CONSTRAINT fk_rails_408a205f48 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_appeals fk_rails_4153b9e5a4; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_appeals
ADD CONSTRAINT fk_rails_4153b9e5a4 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_events fk_rails_41fefee740; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_events
ADD CONSTRAINT fk_rails_41fefee740 FOREIGN KEY (user_session_id) REFERENCES public.user_sessions(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_post_votes fk_rails_43fb736f24; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_post_votes
ADD CONSTRAINT fk_rails_43fb736f24 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: dmails fk_rails_46910c4d2c; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.dmails
ADD CONSTRAINT fk_rails_46910c4d2c FOREIGN KEY (to_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_flags fk_rails_4a92b4b725; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_flags
ADD CONSTRAINT fk_rails_4a92b4b725 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: comments fk_rails_4b8a638a8b; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comments
ADD CONSTRAINT fk_rails_4b8a638a8b FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_approvals fk_rails_4cda56c76c; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_approvals
ADD CONSTRAINT fk_rails_4cda56c76c FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: news_updates fk_rails_502e0a41d1; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.news_updates
ADD CONSTRAINT fk_rails_502e0a41d1 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_topics fk_rails_53d4e863cd; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_topics
ADD CONSTRAINT fk_rails_53d4e863cd FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_upgrades fk_rails_55b7770fa9; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_upgrades
ADD CONSTRAINT fk_rails_55b7770fa9 FOREIGN KEY (recipient_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_implications fk_rails_567423c3a3; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_implications
ADD CONSTRAINT fk_rails_567423c3a3 FOREIGN KEY (approver_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: comments fk_rails_56c1cf09bc; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comments
ADD CONSTRAINT fk_rails_56c1cf09bc FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_posts fk_rails_5badbb08d8; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_posts
ADD CONSTRAINT fk_rails_5badbb08d8 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_post_votes fk_rails_5c3f90ef3f; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_post_votes
ADD CONSTRAINT fk_rails_5c3f90ef3f FOREIGN KEY (forum_post_id) REFERENCES public.forum_posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_commentaries fk_rails_6110874871; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_commentaries
ADD CONSTRAINT fk_rails_6110874871 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: note_versions fk_rails_611f87a5ae; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.note_versions
ADD CONSTRAINT fk_rails_611f87a5ae FOREIGN KEY (note_id) REFERENCES public.notes(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: saved_searches fk_rails_63c5382842; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.saved_searches
ADD CONSTRAINT fk_rails_63c5382842 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_flags fk_rails_68fe8072b5; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_flags
ADD CONSTRAINT fk_rails_68fe8072b5 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_events fk_rails_717ccf5f73; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_events
ADD CONSTRAINT fk_rails_717ccf5f73 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: note_versions fk_rails_71b80cd026; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.note_versions
ADD CONSTRAINT fk_rails_71b80cd026 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: moderation_reports fk_rails_7221bfc52f; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.moderation_reports
ADD CONSTRAINT fk_rails_7221bfc52f FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: ip_bans fk_rails_73e3027d29; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.ip_bans
ADD CONSTRAINT fk_rails_73e3027d29 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_approvals fk_rails_74f76ef71e; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_approvals
ADD CONSTRAINT fk_rails_74f76ef71e FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: favorite_groups fk_rails_796204a5e3; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.favorite_groups
ADD CONSTRAINT fk_rails_796204a5e3 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_feedback fk_rails_81884ec765; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_feedback
ADD CONSTRAINT fk_rails_81884ec765 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: bulk_update_requests fk_rails_87084cb039; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bulk_update_requests
ADD CONSTRAINT fk_rails_87084cb039 FOREIGN KEY (approver_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_aliases fk_rails_90fd158a45; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_aliases
ADD CONSTRAINT fk_rails_90fd158a45 FOREIGN KEY (forum_topic_id) REFERENCES public.forum_topics(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: media_metadata fk_rails_93a4b916bd; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.media_metadata
ADD CONSTRAINT fk_rails_93a4b916bd FOREIGN KEY (media_asset_id) REFERENCES public.media_assets(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: comment_votes fk_rails_a0196e2ef9; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comment_votes
ADD CONSTRAINT fk_rails_a0196e2ef9 FOREIGN KEY (comment_id) REFERENCES public.comments(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_topics fk_rails_a0e236112e; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_topics
ADD CONSTRAINT fk_rails_a0e236112e FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: notes fk_rails_a167a78679; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.notes
ADD CONSTRAINT fk_rails_a167a78679 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_implications fk_rails_aa452a83e5; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_implications
ADD CONSTRAINT fk_rails_aa452a83e5 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: bulk_update_requests fk_rails_ad41b77f74; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.bulk_update_requests
ADD CONSTRAINT fk_rails_ad41b77f74 FOREIGN KEY (forum_topic_id) REFERENCES public.forum_topics(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_commentary_versions fk_rails_af197b3f45; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_commentary_versions
ADD CONSTRAINT fk_rails_af197b3f45 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_topic_visits fk_rails_b19b04be70; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_topic_visits
ADD CONSTRAINT fk_rails_b19b04be70 FOREIGN KEY (forum_topic_id) REFERENCES public.forum_topics(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_feedback fk_rails_b1c80e6f0a; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_feedback
ADD CONSTRAINT fk_rails_b1c80e6f0a FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_versions fk_rails_b1cda9510c; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_versions
ADD CONSTRAINT fk_rails_b1cda9510c FOREIGN KEY (artist_id) REFERENCES public.artists(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_votes fk_rails_b550730fb8; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_votes
ADD CONSTRAINT fk_rails_b550730fb8 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_implications fk_rails_bec6ee1cbe; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_implications
ADD CONSTRAINT fk_rails_bec6ee1cbe FOREIGN KEY (forum_post_id) REFERENCES public.forum_posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: news_updates fk_rails_c008307ac5; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.news_updates
ADD CONSTRAINT fk_rails_c008307ac5 FOREIGN KEY (creator_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: dmails fk_rails_c303efc12e; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.dmails
ADD CONSTRAINT fk_rails_c303efc12e FOREIGN KEY (owner_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: wiki_page_versions fk_rails_c6ed6113f4; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.wiki_page_versions
ADD CONSTRAINT fk_rails_c6ed6113f4 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_aliases fk_rails_ca93879f64; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_aliases
ADD CONSTRAINT fk_rails_ca93879f64 FOREIGN KEY (approver_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: favorites fk_rails_d15744e438; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.favorites
ADD CONSTRAINT fk_rails_d15744e438 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: uploads fk_rails_d29b037216; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.uploads
ADD CONSTRAINT fk_rails_d29b037216 FOREIGN KEY (uploader_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_implications fk_rails_dba2c19f93; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_implications
ADD CONSTRAINT fk_rails_dba2c19f93 FOREIGN KEY (forum_topic_id) REFERENCES public.forum_topics(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: favorites fk_rails_dcaf44a136; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.favorites
ADD CONSTRAINT fk_rails_dcaf44a136 FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: email_addresses fk_rails_de643267e7; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.email_addresses
ADD CONSTRAINT fk_rails_de643267e7 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: note_versions fk_rails_e4a6971555; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.note_versions
ADD CONSTRAINT fk_rails_e4a6971555 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_urls fk_rails_e4e6c00d41; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_urls
ADD CONSTRAINT fk_rails_e4e6c00d41 FOREIGN KEY (artist_id) REFERENCES public.artists(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: tag_aliases fk_rails_e5a732a43b; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tag_aliases
ADD CONSTRAINT fk_rails_e5a732a43b FOREIGN KEY (forum_post_id) REFERENCES public.forum_posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_disapprovals fk_rails_e6a71f8147; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_disapprovals
ADD CONSTRAINT fk_rails_e6a71f8147 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: forum_posts fk_rails_eef947df00; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.forum_posts
ADD CONSTRAINT fk_rails_eef947df00 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: posts fk_rails_f23dabc609; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.posts
ADD CONSTRAINT fk_rails_f23dabc609 FOREIGN KEY (approver_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: pixiv_ugoira_frame_data fk_rails_f249d093cc; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.pixiv_ugoira_frame_data
ADD CONSTRAINT fk_rails_f249d093cc FOREIGN KEY (post_id) REFERENCES public.posts(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: artist_versions fk_rails_f37d58ea23; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.artist_versions
ADD CONSTRAINT fk_rails_f37d58ea23 FOREIGN KEY (updater_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: post_votes fk_rails_f3edc07390; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.post_votes
ADD CONSTRAINT fk_rails_f3edc07390 FOREIGN KEY (user_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- Name: user_upgrades fk_rails_f9349ed07b; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_upgrades
ADD CONSTRAINT fk_rails_f9349ed07b FOREIGN KEY (purchaser_id) REFERENCES public.users(id) DEFERRABLE INITIALLY DEFERRED;
--
-- PostgreSQL database dump complete
--
@@ -5012,6 +5668,8 @@ INSERT INTO "schema_migrations" (version) VALUES
('20220104214319'),
('20220106171727'),
('20220106172910'),
('20220107014433');
('20220107014433'),
('20220109032042'),
('20220109163815');

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env ruby
require_relative "../../config/environment"
Favorite.transaction do
Favorite.left_outer_joins(:post).where("posts.id": nil).destroy_all
print "Commit? (yes/no): "
raise "abort" unless STDIN.readline.chomp == "yes"
end

View File

@@ -0,0 +1,15 @@
#!/usr/bin/env ruby
require_relative "../../config/environment"
ApplicationRecord.transaction do
Favorite.left_outer_joins(:post).where("posts.id": nil).destroy_all
ArtistVersion.left_outer_joins(:artist).where("artists.id": nil).destroy_all
Dmail.left_outer_joins(:owner).where("users.id": nil).destroy_all
ForumTopicVisit.left_outer_joins(:user).where("users.id": nil).destroy_all
NoteVersion.left_outer_joins(:post).where("posts.id": nil).destroy_all
Upload.where(parent_id: 0).update(parent_id: nil)
print "Commit? (yes/no): "
raise "abort" unless STDIN.readline.chomp == "yes"
end