Major database cleanup

This commit is contained in:
Liam 2024-08-18 14:35:26 -04:00
parent d78201d05f
commit d9945e0c55
14 changed files with 410 additions and 225 deletions

View file

@ -12,7 +12,7 @@ defmodule Philomena.Adverts.Advert do
field :start_date, PhilomenaQuery.Ecto.RelativeDate field :start_date, PhilomenaQuery.Ecto.RelativeDate
field :finish_date, PhilomenaQuery.Ecto.RelativeDate field :finish_date, PhilomenaQuery.Ecto.RelativeDate
field :restrictions, :string field :restrictions, :string
field :notes, :string field :notes, :string, default: ""
field :image_mime_type, :string, virtual: true field :image_mime_type, :string, virtual: true
field :image_size, :integer, virtual: true field :image_size, :integer, virtual: true

View file

@ -10,10 +10,10 @@ defmodule Philomena.Badges.Award do
belongs_to :awarded_by, User belongs_to :awarded_by, User
belongs_to :badge, Badge belongs_to :badge, Badge
field :label, :string
field :awarded_on, :utc_datetime field :awarded_on, :utc_datetime
field :reason, :string field :label, :string, default: ""
field :badge_name, :string field :reason, :string, default: ""
field :badge_name, :string, default: ""
timestamps(inserted_at: :created_at, type: :utc_datetime) timestamps(inserted_at: :created_at, type: :utc_datetime)
end end

View file

@ -9,7 +9,7 @@ defmodule Philomena.Bans.Fingerprint do
belongs_to :banning_user, User belongs_to :banning_user, User
field :reason, :string field :reason, :string
field :note, :string field :note, :string, default: ""
field :enabled, :boolean, default: true field :enabled, :boolean, default: true
field :valid_until, PhilomenaQuery.Ecto.RelativeDate field :valid_until, PhilomenaQuery.Ecto.RelativeDate
field :fingerprint, :string field :fingerprint, :string

View file

@ -9,7 +9,7 @@ defmodule Philomena.Bans.Subnet do
belongs_to :banning_user, User belongs_to :banning_user, User
field :reason, :string field :reason, :string
field :note, :string field :note, :string, default: ""
field :enabled, :boolean, default: true field :enabled, :boolean, default: true
field :valid_until, PhilomenaQuery.Ecto.RelativeDate field :valid_until, PhilomenaQuery.Ecto.RelativeDate
field :specification, EctoNetwork.INET field :specification, EctoNetwork.INET

View file

@ -10,7 +10,7 @@ defmodule Philomena.Bans.User do
belongs_to :banning_user, User belongs_to :banning_user, User
field :reason, :string field :reason, :string
field :note, :string field :note, :string, default: ""
field :enabled, :boolean, default: true field :enabled, :boolean, default: true
field :valid_until, PhilomenaQuery.Ecto.RelativeDate field :valid_until, PhilomenaQuery.Ecto.RelativeDate
field :generated_ban_id, :string field :generated_ban_id, :string

View file

@ -57,7 +57,7 @@ defmodule Philomena.Channels.AutomaticUpdater do
attrs = attrs =
live_channels live_channels
|> Map.get(channel.short_name, %{}) |> Map.get(channel.short_name, %{})
|> Map.merge(%{last_live_at: now, last_fetched_at: now}) |> Map.merge(%{last_fetched_at: now})
Channels.update_channel_state(channel, attrs) Channels.update_channel_state(channel, attrs)
end end

View file

@ -16,8 +16,6 @@ defmodule Philomena.Channels.Channel do
field :nsfw, :boolean, default: false field :nsfw, :boolean, default: false
field :is_live, :boolean, default: false field :is_live, :boolean, default: false
field :last_fetched_at, :utc_datetime field :last_fetched_at, :utc_datetime
field :next_check_at, :utc_datetime
field :last_live_at, :utc_datetime
field :thumbnail_url, :string, default: "" field :thumbnail_url, :string, default: ""
timestamps(inserted_at: :created_at, type: :utc_datetime) timestamps(inserted_at: :created_at, type: :utc_datetime)
@ -39,8 +37,7 @@ defmodule Philomena.Channels.Channel do
:nsfw, :nsfw,
:viewers, :viewers,
:thumbnail_url, :thumbnail_url,
:last_fetched_at, :last_fetched_at
:last_live_at
]) ])
end end

View file

@ -13,10 +13,10 @@ defmodule Philomena.Commissions.Commission do
field :open, :boolean field :open, :boolean
field :categories, {:array, :string}, default: [] field :categories, {:array, :string}, default: []
field :information, :string field :information, :string, default: ""
field :contact, :string field :contact, :string, default: ""
field :will_create, :string field :will_create, :string, default: ""
field :will_not_create, :string field :will_not_create, :string, default: ""
field :commission_items_count, :integer, default: 0 field :commission_items_count, :integer, default: 0
timestamps(inserted_at: :created_at, type: :utc_datetime) timestamps(inserted_at: :created_at, type: :utc_datetime)

View file

@ -12,7 +12,7 @@ defmodule Philomena.Commissions.Item do
field :item_type, :string field :item_type, :string
field :description, :string field :description, :string
field :base_price, :decimal field :base_price, :decimal
field :add_ons, :string field :add_ons, :string, default: ""
timestamps(inserted_at: :created_at, type: :utc_datetime) timestamps(inserted_at: :created_at, type: :utc_datetime)
end end

View file

@ -11,7 +11,7 @@ defmodule Philomena.DuplicateReports.DuplicateReport do
belongs_to :user, User belongs_to :user, User
belongs_to :modifier, User belongs_to :modifier, User
field :reason, :string field :reason, :string, default: ""
field :state, :string, default: "open" field :state, :string, default: "open"
timestamps(inserted_at: :created_at, type: :utc_datetime) timestamps(inserted_at: :created_at, type: :utc_datetime)

View file

@ -13,10 +13,10 @@ defmodule Philomena.Filters.Filter do
field :name, :string field :name, :string
field :description, :string, default: "" field :description, :string, default: ""
field :system, :boolean field :system, :boolean, default: false
field :public, :boolean field :public, :boolean, default: false
field :hidden_complex_str, :string field :hidden_complex_str, :string, default: ""
field :spoilered_complex_str, :string field :spoilered_complex_str, :string, default: ""
field :hidden_tag_ids, {:array, :integer}, default: [] field :hidden_tag_ids, {:array, :integer}, default: []
field :spoilered_tag_ids, {:array, :integer}, default: [] field :spoilered_tag_ids, {:array, :integer}, default: []
field :user_count, :integer, default: 0 field :user_count, :integer, default: 0

View file

@ -9,8 +9,6 @@ defmodule Philomena.PollVotes.PollVote do
belongs_to :poll_option, PollOption belongs_to :poll_option, PollOption
belongs_to :user, User belongs_to :user, User
field :rank, :integer
timestamps(inserted_at: :created_at, updated_at: false, type: :utc_datetime) timestamps(inserted_at: :created_at, updated_at: false, type: :utc_datetime)
end end

View file

@ -0,0 +1,310 @@
defmodule Philomena.Repo.Migrations.Cleanup do
use Ecto.Migration
def change do
# NULL values
updates =
"""
update badge_awards set label='' where label is null;
update badge_awards set reason='' where reason is null;
update badge_awards set badge_name='' where badge_name is null;
update channels set thumbnail_url='' where thumbnail_url is null;
delete from commission_items where commission_id is null;
update commission_items set add_ons='' where add_ons is null;
update commissions set will_create='' where will_create is null;
update commissions set will_not_create='' where will_not_create is null;
update comments set ip='127.0.0.1' where ip is null;
update comments set fingerprint='bd41d8cd98f00b204e9800998ecf8427e' where fingerprint is null;
update duplicate_reports set reason='' where reason is null;
update filters set hidden_complex_str='' where hidden_complex_str is null;
update filters set spoilered_complex_str='' where spoilered_complex_str is null;
update fingerprint_bans set note='' where note is null;
update images set ip='127.0.0.1' where ip is null;
update images set fingerprint='bd41d8cd98f00b204e9800998ecf8427e' where fingerprint is null;
update posts set ip='127.0.0.1' where ip is null;
update posts set fingerprint='bd41d8cd98f00b204e9800998ecf8427e' where fingerprint is null;
update source_changes set fingerprint='bd41d8cd98f00b204e9800998ecf8427e' where fingerprint is null;
update subnet_bans set note='' where note is null;
update tag_changes set ip='127.0.0.1' where ip is null;
update tag_changes set fingerprint='bd41d8cd98f00b204e9800998ecf8427e' where fingerprint is null;
update user_bans set note='' where note is null;
"""
# These statements should not be run by the migration in production.
# Run them manually in psql before this migration instead.
if direction() == :up and System.get_env("MIX_ENV") != "prod" do
for stmt <- String.split(updates, "\n") do
execute(stmt)
end
end
# Missing default values
missing_default = [
adverts: [:notes],
badge_awards: [:label, :reason, :badge_name],
commission_items: [:add_ons],
commissions: [:will_create, :will_not_create],
duplicate_reports: [:reason],
filters: [:hidden_complex_str, :spoilered_complex_str],
fingerprint_bans: [:note],
subnet_bans: [:note],
user_bans: [:note]
]
for {table, columns} <- missing_default do
add_default = Enum.map_join(columns, ", ", &"alter column #{&1} set default ''")
remove_default = Enum.map_join(columns, ", ", &"alter column #{&1} drop default")
execute(
"alter table #{table} #{add_default};",
"alter table #{table} #{remove_default};"
)
end
# Missing NOT NULL constraints
missing_not_null = [
adverts: [
:image,
:clicks,
:impressions,
:live,
:link,
:title,
:notes,
:start_date,
:finish_date,
:restrictions
],
badges: [:image, :priority],
badge_awards: [:label, :reason, :badge_name],
channels: [:thumbnail_url],
comments: [:approved, :anonymous, :destroyed_content, :image_id, :ip, :fingerprint],
commission_items: [:commission_id, :item_type, :description, :base_price, :add_ons],
commissions: [:information, :contact, :will_create, :will_not_create],
duplicate_reports: [:reason],
filters: [:hidden_complex_str, :spoilered_complex_str],
fingerprint_bans: [:fingerprint, :note],
images: [:anonymous, :approved, :ip, :fingerprint, :image_orig_size],
messages: [:approved],
posts: [:approved, :ip, :fingerprint],
reports: [:system],
source_changes: [:fingerprint],
subnet_bans: [:note, :specification],
tag_changes: [:ip, :fingerprint],
topics: [:anonymous],
user_bans: [:note],
versions: [:created_at]
]
for {table, columns} <- missing_not_null do
add_not_null = Enum.map_join(columns, ", ", &"alter column #{&1} set not null")
remove_not_null = Enum.map_join(columns, ", ", &"alter column #{&1} drop not null")
execute(
"alter table #{table} #{add_not_null};",
"alter table #{table} #{remove_not_null};"
)
end
# Unused columns
alter table(:artist_links) do
remove :path, :"character varying(255)"
remove :hostname, :"character varying(255)"
end
alter table(:channels) do
remove :watcher_ids, {:array, :integer}, default: [], null: false
remove :watcher_count, :integer, default: 0, null: false
remove :tags, :string
remove :viewer_minutes_today, :integer, default: 0, null: false
remove :viewer_minutes_thisweek, :integer, default: 0, null: false
remove :viewer_minutes_thismonth, :integer, default: 0, null: false
remove :total_viewer_minutes, :integer, default: 0, null: false
remove :next_check_at, :"timestamp without time zone"
remove :last_live_at, :"timestamp without time zone"
remove :banner_image, :string
remove :channel_image, :string
remove :remote_stream_id, :integer
end
alter table(:comments) do
remove :user_agent, :string, default: ""
remove :referrer, :string, default: ""
remove :name_at_post_time, :string
remove :body_textile, :string, default: "", null: false
end
alter table(:commission_items) do
remove :description_textile, :string
remove :add_ons_textile, :string
end
alter table(:commissions) do
remove :information_textile, :string
remove :contact_textile, :string
remove :will_create_textile, :string
remove :will_not_create_textile, :string
end
alter table(:dnp_entries) do
remove :conditions_textile, :string, default: "", null: false
remove :reason_textile, :string, default: "", null: false
remove :instructions_textile, :string, default: "", null: false
end
alter table(:forums) do
remove :watcher_ids, {:array, :integer}, default: [], null: false
remove :watcher_count, :integer, default: 0, null: false
end
alter table(:galleries) do
remove :watcher_ids, {:array, :integer}, default: [], null: false
remove :watcher_count, :integer, default: 0, null: false
end
alter table(:images) do
remove :tag_ids, {:array, :integer}, default: [], null: false
remove :watcher_ids, {:array, :integer}, default: [], null: false
remove :watcher_count, :integer, default: 0, null: false
remove :user_agent, :string, default: ""
remove :referrer, :string, default: ""
remove :votes_count, :integer, default: 0, null: false
remove :tag_list_cache, :string
remove :tag_list_plus_alias_cache, :string
remove :file_name_cache, :string
remove :ne_intensity, :"double precision"
remove :nw_intensity, :"double precision"
remove :se_intensity, :"double precision"
remove :sw_intensity, :"double precision"
remove :average_intensity, :"double precision"
remove :description_textile, :string, default: "", null: false
remove :scratchpad_textile, :string
end
alter table(:messages) do
remove :body_textile, :string, default: "", null: false
end
alter table(:mod_notes) do
remove :body_textile, :text, default: "", null: false
end
alter table(:poll_votes) do
remove :rank, :integer
end
alter table(:polls) do
remove :deleted_by_id, references(:users, name: "fk_rails_2bf9149369")
remove :hidden_from_users, :boolean, default: false, null: false
remove :deletion_reason, :string, default: "", null: false
end
alter table(:posts) do
remove :user_agent, :string, default: ""
remove :referrer, :string, default: ""
remove :name_at_post_time, :string
remove :body_textile, :string, default: "", null: false
end
alter table(:reports) do
remove :referrer, :string, default: ""
remove :reason_textile, :string, default: "", null: false
end
alter table(:roles) do
remove :resource_id, :integer
remove :created_at, :"timestamp without time zone"
remove :updated_at, :"timestamp without time zone"
end
alter table(:source_changes) do
remove :user_agent, :string, size: 255, default: ""
remove :referrer, :string, size: 255, default: ""
end
alter table(:tags) do
remove :description_textile, :string, default: ""
end
alter table(:tag_changes) do
remove :user_agent, :string, default: ""
remove :referrer, :string, default: ""
end
alter table(:topics) do
remove :watcher_ids, {:array, :integer}, default: [], null: false
remove :watcher_count, :integer, default: 0, null: false
end
alter table(:users) do
remove :sign_in_count, :integer, default: 0, null: false
remove :current_sign_in_at, :"timestamp without time zone"
remove :current_sign_in_ip, :inet
remove :last_sign_in_at, :"timestamp without time zone"
remove :last_sign_in_ip, :inet
remove :unread_notification_ids, {:array, :integer}, default: [], null: false
remove :last_donation_at, :"timestamp without time zone"
remove :description_textile, :string
remove :scratchpad_textile, :text
end
# Wrong data type, created by Phoenix (timestamp(0) without time zone)
for table <- [
:channel_live_notifications,
:forum_post_notifications,
:forum_topic_notifications,
:gallery_image_notifications,
:image_comment_notifications,
:image_merge_notifications,
:source_changes
] do
alter table(table) do
modify :created_at, :"timestamp without time zone",
from: :"timestamp(0) without time zone"
modify :updated_at, :"timestamp without time zone",
from: :"timestamp(0) without time zone"
end
end
for table <- [:autocomplete, :moderation_logs, :user_tokens] do
alter table(table) do
modify :created_at, :"timestamp without time zone",
from: :"timestamp(0) without time zone"
end
end
alter table(:users) do
modify :confirmed_at, :"timestamp without time zone",
from: :"timestamp(0) without time zone"
end
# Wrong data type, created by Rails (timestamp(6) without time zone)
for table <- [:image_features, :static_pages, :static_page_versions] do
alter table(table) do
modify :created_at, :"timestamp without time zone",
from: :"timestamp(6) without time zone"
modify :updated_at, :"timestamp without time zone",
from: :"timestamp(6) without time zone"
end
end
end
end

View file

@ -2,7 +2,7 @@
-- PostgreSQL database dump -- PostgreSQL database dump
-- --
-- Dumped from database version 16.3 -- Dumped from database version 16.4
-- Dumped by pg_dump version 16.3 -- Dumped by pg_dump version 16.3
SET statement_timeout = 0; SET statement_timeout = 0;
@ -40,18 +40,18 @@ SET default_table_access_method = heap;
CREATE TABLE public.adverts ( CREATE TABLE public.adverts (
id integer NOT NULL, id integer NOT NULL,
image character varying, image character varying NOT NULL,
link character varying, link character varying NOT NULL,
title character varying, title character varying NOT NULL,
clicks integer DEFAULT 0, clicks integer DEFAULT 0 NOT NULL,
impressions integer DEFAULT 0, impressions integer DEFAULT 0 NOT NULL,
live boolean DEFAULT false, live boolean DEFAULT false NOT NULL,
start_date timestamp without time zone, start_date timestamp without time zone NOT NULL,
finish_date timestamp without time zone, finish_date timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
restrictions character varying, restrictions character varying NOT NULL,
notes character varying notes character varying DEFAULT ''::character varying NOT NULL
); );
@ -82,8 +82,6 @@ CREATE TABLE public.artist_links (
id integer NOT NULL, id integer NOT NULL,
aasm_state character varying NOT NULL, aasm_state character varying NOT NULL,
uri character varying NOT NULL, uri character varying NOT NULL,
hostname character varying,
path character varying,
verification_code character varying NOT NULL, verification_code character varying NOT NULL,
public boolean DEFAULT true NOT NULL, public boolean DEFAULT true NOT NULL,
next_check_at timestamp without time zone, next_check_at timestamp without time zone,
@ -122,7 +120,7 @@ ALTER SEQUENCE public.artist_links_id_seq OWNED BY public.artist_links.id;
CREATE TABLE public.autocomplete ( CREATE TABLE public.autocomplete (
content bytea NOT NULL, content bytea NOT NULL,
created_at timestamp(0) without time zone NOT NULL created_at timestamp without time zone NOT NULL
); );
@ -132,15 +130,15 @@ CREATE TABLE public.autocomplete (
CREATE TABLE public.badge_awards ( CREATE TABLE public.badge_awards (
id integer NOT NULL, id integer NOT NULL,
label character varying, label character varying DEFAULT ''::character varying NOT NULL,
awarded_on timestamp without time zone NOT NULL, awarded_on timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
user_id integer NOT NULL, user_id integer NOT NULL,
badge_id integer NOT NULL, badge_id integer NOT NULL,
awarded_by_id integer NOT NULL, awarded_by_id integer NOT NULL,
reason character varying, reason character varying DEFAULT ''::character varying NOT NULL,
badge_name character varying badge_name character varying DEFAULT ''::character varying NOT NULL
); );
@ -171,11 +169,11 @@ CREATE TABLE public.badges (
id integer NOT NULL, id integer NOT NULL,
title character varying NOT NULL, title character varying NOT NULL,
description character varying NOT NULL, description character varying NOT NULL,
image character varying, image character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
disable_award boolean DEFAULT false NOT NULL, disable_award boolean DEFAULT false NOT NULL,
priority boolean DEFAULT false priority boolean DEFAULT false NOT NULL
); );
@ -205,8 +203,8 @@ ALTER SEQUENCE public.badges_id_seq OWNED BY public.badges.id;
CREATE TABLE public.channel_live_notifications ( CREATE TABLE public.channel_live_notifications (
channel_id bigint NOT NULL, channel_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -229,27 +227,15 @@ CREATE TABLE public.channels (
id integer NOT NULL, id integer NOT NULL,
short_name character varying NOT NULL, short_name character varying NOT NULL,
title character varying NOT NULL, title character varying NOT NULL,
channel_image character varying,
tags character varying,
viewers integer DEFAULT 0 NOT NULL, viewers integer DEFAULT 0 NOT NULL,
nsfw boolean DEFAULT false NOT NULL, nsfw boolean DEFAULT false NOT NULL,
is_live boolean DEFAULT false NOT NULL, is_live boolean DEFAULT false NOT NULL,
last_fetched_at timestamp without time zone, last_fetched_at timestamp without time zone,
next_check_at timestamp without time zone,
last_live_at timestamp without time zone,
watcher_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watcher_count integer DEFAULT 0 NOT NULL,
type character varying NOT NULL, type character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
associated_artist_tag_id integer, associated_artist_tag_id integer,
viewer_minutes_today integer DEFAULT 0 NOT NULL, thumbnail_url character varying DEFAULT ''::character varying NOT NULL
viewer_minutes_thisweek integer DEFAULT 0 NOT NULL,
viewer_minutes_thismonth integer DEFAULT 0 NOT NULL,
total_viewer_minutes integer DEFAULT 0 NOT NULL,
banner_image character varying,
remote_stream_id integer,
thumbnail_url character varying DEFAULT ''::character varying
); );
@ -278,25 +264,21 @@ ALTER SEQUENCE public.channels_id_seq OWNED BY public.channels.id;
CREATE TABLE public.comments ( CREATE TABLE public.comments (
id integer NOT NULL, id integer NOT NULL,
body_textile character varying DEFAULT ''::character varying NOT NULL, ip inet NOT NULL,
ip inet, fingerprint character varying NOT NULL,
fingerprint character varying, anonymous boolean DEFAULT false NOT NULL,
user_agent character varying DEFAULT ''::character varying,
referrer character varying DEFAULT ''::character varying,
anonymous boolean DEFAULT false,
hidden_from_users boolean DEFAULT false NOT NULL, hidden_from_users boolean DEFAULT false NOT NULL,
user_id integer, user_id integer,
deleted_by_id integer, deleted_by_id integer,
image_id integer, image_id integer NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
edit_reason character varying, edit_reason character varying,
edited_at timestamp without time zone, edited_at timestamp without time zone,
deletion_reason character varying DEFAULT ''::character varying NOT NULL, deletion_reason character varying DEFAULT ''::character varying NOT NULL,
destroyed_content boolean DEFAULT false, destroyed_content boolean DEFAULT false NOT NULL,
name_at_post_time character varying,
body character varying NOT NULL, body character varying NOT NULL,
approved boolean DEFAULT false approved boolean DEFAULT false NOT NULL
); );
@ -325,16 +307,14 @@ ALTER SEQUENCE public.comments_id_seq OWNED BY public.comments.id;
CREATE TABLE public.commission_items ( CREATE TABLE public.commission_items (
id integer NOT NULL, id integer NOT NULL,
commission_id integer, commission_id integer NOT NULL,
item_type character varying, item_type character varying NOT NULL,
description_textile character varying, base_price numeric NOT NULL,
base_price numeric,
add_ons_textile character varying,
example_image_id integer, example_image_id integer,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
description character varying, description character varying NOT NULL,
add_ons character varying add_ons character varying DEFAULT ''::character varying NOT NULL
); );
@ -366,18 +346,14 @@ CREATE TABLE public.commissions (
user_id integer NOT NULL, user_id integer NOT NULL,
open boolean NOT NULL, open boolean NOT NULL,
categories character varying[] DEFAULT '{}'::character varying[] NOT NULL, categories character varying[] DEFAULT '{}'::character varying[] NOT NULL,
information_textile character varying,
contact_textile character varying,
sheet_image_id integer, sheet_image_id integer,
will_create_textile character varying,
will_not_create_textile character varying,
commission_items_count integer DEFAULT 0 NOT NULL, commission_items_count integer DEFAULT 0 NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
information character varying, information character varying NOT NULL,
contact character varying, contact character varying NOT NULL,
will_create character varying, will_create character varying DEFAULT ''::character varying NOT NULL,
will_not_create character varying will_not_create character varying DEFAULT ''::character varying NOT NULL
); );
@ -450,10 +426,7 @@ CREATE TABLE public.dnp_entries (
tag_id integer NOT NULL, tag_id integer NOT NULL,
aasm_state character varying DEFAULT 'requested'::character varying NOT NULL, aasm_state character varying DEFAULT 'requested'::character varying NOT NULL,
dnp_type character varying NOT NULL, dnp_type character varying NOT NULL,
conditions_textile character varying DEFAULT ''::character varying NOT NULL,
reason_textile character varying DEFAULT ''::character varying NOT NULL,
hide_reason boolean DEFAULT false NOT NULL, hide_reason boolean DEFAULT false NOT NULL,
instructions_textile character varying DEFAULT ''::character varying NOT NULL,
feedback character varying NOT NULL, feedback character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
@ -525,7 +498,7 @@ ALTER SEQUENCE public.donations_id_seq OWNED BY public.donations.id;
CREATE TABLE public.duplicate_reports ( CREATE TABLE public.duplicate_reports (
id integer NOT NULL, id integer NOT NULL,
reason character varying, reason character varying DEFAULT ''::character varying NOT NULL,
state character varying DEFAULT 'open'::character varying NOT NULL, state character varying DEFAULT 'open'::character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
@ -565,8 +538,8 @@ CREATE TABLE public.filters (
description character varying NOT NULL, description character varying NOT NULL,
system boolean DEFAULT false NOT NULL, system boolean DEFAULT false NOT NULL,
public boolean DEFAULT false NOT NULL, public boolean DEFAULT false NOT NULL,
hidden_complex_str character varying, hidden_complex_str character varying DEFAULT ''::character varying NOT NULL,
spoilered_complex_str character varying, spoilered_complex_str character varying DEFAULT ''::character varying NOT NULL,
hidden_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL, hidden_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
spoilered_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL, spoilered_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
user_count integer DEFAULT 0 NOT NULL, user_count integer DEFAULT 0 NOT NULL,
@ -602,10 +575,10 @@ ALTER SEQUENCE public.filters_id_seq OWNED BY public.filters.id;
CREATE TABLE public.fingerprint_bans ( CREATE TABLE public.fingerprint_bans (
id integer NOT NULL, id integer NOT NULL,
reason character varying NOT NULL, reason character varying NOT NULL,
note character varying, note character varying DEFAULT ''::character varying NOT NULL,
enabled boolean DEFAULT true NOT NULL, enabled boolean DEFAULT true NOT NULL,
valid_until timestamp without time zone NOT NULL, valid_until timestamp without time zone NOT NULL,
fingerprint character varying, fingerprint character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
banning_user_id integer NOT NULL, banning_user_id integer NOT NULL,
@ -641,8 +614,8 @@ CREATE TABLE public.forum_post_notifications (
topic_id bigint NOT NULL, topic_id bigint NOT NULL,
post_id bigint NOT NULL, post_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -664,8 +637,8 @@ CREATE TABLE public.forum_subscriptions (
CREATE TABLE public.forum_topic_notifications ( CREATE TABLE public.forum_topic_notifications (
topic_id bigint NOT NULL, topic_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -682,8 +655,6 @@ CREATE TABLE public.forums (
access_level character varying DEFAULT 'normal'::character varying NOT NULL, access_level character varying DEFAULT 'normal'::character varying NOT NULL,
topic_count integer DEFAULT 0 NOT NULL, topic_count integer DEFAULT 0 NOT NULL,
post_count integer DEFAULT 0 NOT NULL, post_count integer DEFAULT 0 NOT NULL,
watcher_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watcher_count integer DEFAULT 0 NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
last_post_id integer, last_post_id integer,
@ -723,8 +694,6 @@ CREATE TABLE public.galleries (
creator_id integer NOT NULL, creator_id integer NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
watcher_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watcher_count integer DEFAULT 0 NOT NULL,
image_count integer DEFAULT 0 NOT NULL, image_count integer DEFAULT 0 NOT NULL,
order_position_asc boolean DEFAULT false NOT NULL order_position_asc boolean DEFAULT false NOT NULL
); );
@ -756,8 +725,8 @@ ALTER SEQUENCE public.galleries_id_seq OWNED BY public.galleries.id;
CREATE TABLE public.gallery_image_notifications ( CREATE TABLE public.gallery_image_notifications (
gallery_id bigint NOT NULL, gallery_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -811,8 +780,8 @@ CREATE TABLE public.image_comment_notifications (
image_id bigint NOT NULL, image_id bigint NOT NULL,
comment_id bigint NOT NULL, comment_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -836,8 +805,8 @@ CREATE TABLE public.image_features (
id bigint NOT NULL, id bigint NOT NULL,
image_id bigint NOT NULL, image_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(6) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL updated_at timestamp without time zone NOT NULL
); );
@ -912,8 +881,8 @@ CREATE TABLE public.image_merge_notifications (
target_id bigint NOT NULL, target_id bigint NOT NULL,
source_id bigint NOT NULL, source_id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
read boolean DEFAULT false NOT NULL read boolean DEFAULT false NOT NULL
); );
@ -985,28 +954,18 @@ CREATE TABLE public.images (
image_format character varying, image_format character varying,
image_mime_type character varying, image_mime_type character varying,
image_aspect_ratio double precision, image_aspect_ratio double precision,
ip inet, ip inet NOT NULL,
fingerprint character varying, fingerprint character varying NOT NULL,
user_agent character varying DEFAULT ''::character varying, anonymous boolean DEFAULT false NOT NULL,
referrer character varying DEFAULT ''::character varying,
anonymous boolean DEFAULT false,
score integer DEFAULT 0 NOT NULL, score integer DEFAULT 0 NOT NULL,
faves_count integer DEFAULT 0 NOT NULL, faves_count integer DEFAULT 0 NOT NULL,
upvotes_count integer DEFAULT 0 NOT NULL, upvotes_count integer DEFAULT 0 NOT NULL,
downvotes_count integer DEFAULT 0 NOT NULL, downvotes_count integer DEFAULT 0 NOT NULL,
votes_count integer DEFAULT 0 NOT NULL,
watcher_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watcher_count integer DEFAULT 0 NOT NULL,
source_url character varying, source_url character varying,
description_textile character varying DEFAULT ''::character varying NOT NULL,
image_sha512_hash character varying, image_sha512_hash character varying,
image_orig_sha512_hash character varying, image_orig_sha512_hash character varying,
deletion_reason character varying, deletion_reason character varying,
tag_list_cache character varying,
tag_list_plus_alias_cache character varying,
file_name_cache character varying,
duplicate_id integer, duplicate_id integer,
tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
comments_count integer DEFAULT 0 NOT NULL, comments_count integer DEFAULT 0 NOT NULL,
processed boolean DEFAULT false NOT NULL, processed boolean DEFAULT false NOT NULL,
thumbnails_generated boolean DEFAULT false NOT NULL, thumbnails_generated boolean DEFAULT false NOT NULL,
@ -1018,24 +977,18 @@ CREATE TABLE public.images (
is_animated boolean NOT NULL, is_animated boolean NOT NULL,
first_seen_at timestamp without time zone NOT NULL, first_seen_at timestamp without time zone NOT NULL,
featured_on timestamp without time zone, featured_on timestamp without time zone,
se_intensity double precision,
sw_intensity double precision,
ne_intensity double precision,
nw_intensity double precision,
average_intensity double precision,
user_id integer, user_id integer,
deleted_by_id integer, deleted_by_id integer,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
destroyed_content boolean DEFAULT false NOT NULL, destroyed_content boolean DEFAULT false NOT NULL,
hidden_image_key character varying, hidden_image_key character varying,
scratchpad_textile character varying,
hides_count integer DEFAULT 0 NOT NULL, hides_count integer DEFAULT 0 NOT NULL,
image_duration double precision, image_duration double precision,
description character varying DEFAULT ''::character varying NOT NULL, description character varying DEFAULT ''::character varying NOT NULL,
scratchpad character varying, scratchpad character varying,
approved boolean DEFAULT false, approved boolean DEFAULT false NOT NULL,
image_orig_size integer image_orig_size integer NOT NULL
); );
@ -1064,13 +1017,12 @@ ALTER SEQUENCE public.images_id_seq OWNED BY public.images.id;
CREATE TABLE public.messages ( CREATE TABLE public.messages (
id integer NOT NULL, id integer NOT NULL,
body_textile character varying DEFAULT ''::character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
from_id integer NOT NULL, from_id integer NOT NULL,
conversation_id integer NOT NULL, conversation_id integer NOT NULL,
body character varying NOT NULL, body character varying NOT NULL,
approved boolean DEFAULT false approved boolean DEFAULT false NOT NULL
); );
@ -1102,7 +1054,6 @@ CREATE TABLE public.mod_notes (
moderator_id integer NOT NULL, moderator_id integer NOT NULL,
notable_id integer NOT NULL, notable_id integer NOT NULL,
notable_type character varying NOT NULL, notable_type character varying NOT NULL,
body_textile text DEFAULT ''::text NOT NULL,
deleted boolean DEFAULT false NOT NULL, deleted boolean DEFAULT false NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
@ -1139,7 +1090,7 @@ CREATE TABLE public.moderation_logs (
body character varying NOT NULL, body character varying NOT NULL,
subject_path character varying NOT NULL, subject_path character varying NOT NULL,
type character varying NOT NULL, type character varying NOT NULL,
created_at timestamp(0) without time zone NOT NULL created_at timestamp without time zone NOT NULL
); );
@ -1273,7 +1224,6 @@ ALTER SEQUENCE public.poll_options_id_seq OWNED BY public.poll_options.id;
CREATE TABLE public.poll_votes ( CREATE TABLE public.poll_votes (
id integer NOT NULL, id integer NOT NULL,
rank integer,
poll_option_id integer NOT NULL, poll_option_id integer NOT NULL,
user_id integer NOT NULL, user_id integer NOT NULL,
created_at timestamp without time zone NOT NULL created_at timestamp without time zone NOT NULL
@ -1311,9 +1261,6 @@ CREATE TABLE public.polls (
total_votes integer DEFAULT 0 NOT NULL, total_votes integer DEFAULT 0 NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
hidden_from_users boolean DEFAULT false NOT NULL,
deleted_by_id integer,
deletion_reason character varying DEFAULT ''::character varying NOT NULL,
topic_id integer NOT NULL topic_id integer NOT NULL
); );
@ -1343,12 +1290,9 @@ ALTER SEQUENCE public.polls_id_seq OWNED BY public.polls.id;
CREATE TABLE public.posts ( CREATE TABLE public.posts (
id integer NOT NULL, id integer NOT NULL,
body_textile character varying DEFAULT ''::character varying NOT NULL,
edit_reason character varying, edit_reason character varying,
ip inet, ip inet NOT NULL,
fingerprint character varying, fingerprint character varying NOT NULL,
user_agent character varying DEFAULT ''::character varying,
referrer character varying DEFAULT ''::character varying,
topic_position integer NOT NULL, topic_position integer NOT NULL,
hidden_from_users boolean DEFAULT false NOT NULL, hidden_from_users boolean DEFAULT false NOT NULL,
anonymous boolean DEFAULT false, anonymous boolean DEFAULT false,
@ -1360,9 +1304,8 @@ CREATE TABLE public.posts (
edited_at timestamp without time zone, edited_at timestamp without time zone,
deletion_reason character varying DEFAULT ''::character varying NOT NULL, deletion_reason character varying DEFAULT ''::character varying NOT NULL,
destroyed_content boolean DEFAULT false NOT NULL, destroyed_content boolean DEFAULT false NOT NULL,
name_at_post_time character varying,
body character varying NOT NULL, body character varying NOT NULL,
approved boolean DEFAULT false approved boolean DEFAULT false NOT NULL
); );
@ -1394,8 +1337,6 @@ CREATE TABLE public.reports (
ip inet NOT NULL, ip inet NOT NULL,
fingerprint character varying, fingerprint character varying,
user_agent character varying DEFAULT ''::character varying, user_agent character varying DEFAULT ''::character varying,
referrer character varying DEFAULT ''::character varying,
reason_textile character varying DEFAULT ''::character varying NOT NULL,
state character varying DEFAULT 'open'::character varying NOT NULL, state character varying DEFAULT 'open'::character varying NOT NULL,
open boolean DEFAULT true NOT NULL, open boolean DEFAULT true NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
@ -1405,7 +1346,7 @@ CREATE TABLE public.reports (
reportable_id integer NOT NULL, reportable_id integer NOT NULL,
reportable_type character varying NOT NULL, reportable_type character varying NOT NULL,
reason character varying NOT NULL, reason character varying NOT NULL,
system boolean DEFAULT false system boolean DEFAULT false NOT NULL
); );
@ -1435,10 +1376,7 @@ ALTER SEQUENCE public.reports_id_seq OWNED BY public.reports.id;
CREATE TABLE public.roles ( CREATE TABLE public.roles (
id integer NOT NULL, id integer NOT NULL,
name character varying, name character varying,
resource_id integer, resource_type character varying
resource_type character varying,
created_at timestamp without time zone,
updated_at timestamp without time zone
); );
@ -1518,12 +1456,10 @@ CREATE TABLE public.source_changes (
image_id bigint NOT NULL, image_id bigint NOT NULL,
user_id bigint, user_id bigint,
ip inet NOT NULL, ip inet NOT NULL,
created_at timestamp(0) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(0) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
added boolean NOT NULL, added boolean NOT NULL,
fingerprint character varying(255), fingerprint character varying(255) NOT NULL,
user_agent character varying(255) DEFAULT ''::character varying,
referrer character varying(255) DEFAULT ''::character varying,
value character varying(255) NOT NULL value character varying(255) NOT NULL
); );
@ -1555,8 +1491,8 @@ CREATE TABLE public.static_page_versions (
id bigint NOT NULL, id bigint NOT NULL,
user_id bigint NOT NULL, user_id bigint NOT NULL,
static_page_id bigint NOT NULL, static_page_id bigint NOT NULL,
created_at timestamp(6) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
title text NOT NULL, title text NOT NULL,
slug text NOT NULL, slug text NOT NULL,
body text NOT NULL body text NOT NULL
@ -1588,8 +1524,8 @@ ALTER SEQUENCE public.static_page_versions_id_seq OWNED BY public.static_page_ve
CREATE TABLE public.static_pages ( CREATE TABLE public.static_pages (
id bigint NOT NULL, id bigint NOT NULL,
created_at timestamp(6) without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
title text NOT NULL, title text NOT NULL,
slug text NOT NULL, slug text NOT NULL,
body text NOT NULL body text NOT NULL
@ -1622,13 +1558,13 @@ ALTER SEQUENCE public.static_pages_id_seq OWNED BY public.static_pages.id;
CREATE TABLE public.subnet_bans ( CREATE TABLE public.subnet_bans (
id integer NOT NULL, id integer NOT NULL,
reason character varying NOT NULL, reason character varying NOT NULL,
note character varying, note character varying DEFAULT ''::character varying NOT NULL,
enabled boolean DEFAULT true NOT NULL, enabled boolean DEFAULT true NOT NULL,
valid_until timestamp without time zone NOT NULL, valid_until timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
banning_user_id integer NOT NULL, banning_user_id integer NOT NULL,
specification inet, specification inet NOT NULL,
generated_ban_id character varying NOT NULL, generated_ban_id character varying NOT NULL,
CONSTRAINT subnet_ban_duration_must_be_valid CHECK ((valid_until < '4000-01-01 00:00:00'::timestamp without time zone)) CONSTRAINT subnet_ban_duration_must_be_valid CHECK ((valid_until < '4000-01-01 00:00:00'::timestamp without time zone))
); );
@ -1659,10 +1595,8 @@ ALTER SEQUENCE public.subnet_bans_id_seq OWNED BY public.subnet_bans.id;
CREATE TABLE public.tag_changes ( CREATE TABLE public.tag_changes (
id integer NOT NULL, id integer NOT NULL,
ip inet, ip inet NOT NULL,
fingerprint character varying, fingerprint character varying NOT NULL,
user_agent character varying DEFAULT ''::character varying,
referrer character varying DEFAULT ''::character varying,
added boolean NOT NULL, added boolean NOT NULL,
tag_name_cache character varying DEFAULT ''::character varying NOT NULL, tag_name_cache character varying DEFAULT ''::character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
@ -1700,7 +1634,6 @@ CREATE TABLE public.tags (
id integer NOT NULL, id integer NOT NULL,
name character varying NOT NULL, name character varying NOT NULL,
slug character varying NOT NULL, slug character varying NOT NULL,
description_textile character varying DEFAULT ''::character varying,
short_description character varying DEFAULT ''::character varying, short_description character varying DEFAULT ''::character varying,
namespace character varying, namespace character varying,
name_in_namespace character varying, name_in_namespace character varying,
@ -1771,9 +1704,7 @@ CREATE TABLE public.topics (
deletion_reason character varying, deletion_reason character varying,
lock_reason character varying, lock_reason character varying,
slug character varying NOT NULL, slug character varying NOT NULL,
anonymous boolean DEFAULT false, anonymous boolean DEFAULT false NOT NULL,
watcher_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watcher_count integer DEFAULT 0 NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
forum_id integer NOT NULL, forum_id integer NOT NULL,
@ -1841,7 +1772,7 @@ ALTER SEQUENCE public.unread_notifications_id_seq OWNED BY public.unread_notific
CREATE TABLE public.user_bans ( CREATE TABLE public.user_bans (
id integer NOT NULL, id integer NOT NULL,
reason character varying NOT NULL, reason character varying NOT NULL,
note character varying, note character varying DEFAULT ''::character varying NOT NULL,
enabled boolean DEFAULT true NOT NULL, enabled boolean DEFAULT true NOT NULL,
valid_until timestamp without time zone NOT NULL, valid_until timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
@ -2017,7 +1948,7 @@ CREATE TABLE public.user_tokens (
token bytea NOT NULL, token bytea NOT NULL,
context character varying(255) NOT NULL, context character varying(255) NOT NULL,
sent_to character varying(255), sent_to character varying(255),
created_at timestamp(0) without time zone NOT NULL created_at timestamp without time zone NOT NULL
); );
@ -2083,11 +2014,6 @@ CREATE TABLE public.users (
reset_password_token character varying, reset_password_token character varying,
reset_password_sent_at timestamp without time zone, reset_password_sent_at timestamp without time zone,
remember_created_at timestamp without time zone, remember_created_at timestamp without time zone,
sign_in_count integer DEFAULT 0 NOT NULL,
current_sign_in_at timestamp without time zone,
last_sign_in_at timestamp without time zone,
current_sign_in_ip inet,
last_sign_in_ip inet,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
deleted_at timestamp without time zone, deleted_at timestamp without time zone,
@ -2095,7 +2021,6 @@ CREATE TABLE public.users (
name character varying NOT NULL, name character varying NOT NULL,
slug character varying NOT NULL, slug character varying NOT NULL,
role character varying DEFAULT 'user'::character varying NOT NULL, role character varying DEFAULT 'user'::character varying NOT NULL,
description_textile character varying,
avatar character varying, avatar character varying,
spoiler_type character varying DEFAULT 'static'::character varying NOT NULL, spoiler_type character varying DEFAULT 'static'::character varying NOT NULL,
theme character varying DEFAULT 'default'::character varying NOT NULL, theme character varying DEFAULT 'default'::character varying NOT NULL,
@ -2121,7 +2046,6 @@ CREATE TABLE public.users (
forum_posts_count integer DEFAULT 0 NOT NULL, forum_posts_count integer DEFAULT 0 NOT NULL,
topic_count integer DEFAULT 0 NOT NULL, topic_count integer DEFAULT 0 NOT NULL,
recent_filter_ids integer[] DEFAULT '{}'::integer[] NOT NULL, recent_filter_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
unread_notification_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
watched_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL, watched_tag_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
deleted_by_user_id integer, deleted_by_user_id integer,
current_filter_id integer, current_filter_id integer,
@ -2133,8 +2057,6 @@ CREATE TABLE public.users (
comments_posted_count integer DEFAULT 0 NOT NULL, comments_posted_count integer DEFAULT 0 NOT NULL,
metadata_updates_count integer DEFAULT 0 NOT NULL, metadata_updates_count integer DEFAULT 0 NOT NULL,
images_favourited_count integer DEFAULT 0 NOT NULL, images_favourited_count integer DEFAULT 0 NOT NULL,
last_donation_at timestamp without time zone,
scratchpad_textile text,
use_centered_layout boolean DEFAULT true NOT NULL, use_centered_layout boolean DEFAULT true NOT NULL,
secondary_role character varying, secondary_role character varying,
hide_default_role boolean DEFAULT false NOT NULL, hide_default_role boolean DEFAULT false NOT NULL,
@ -2150,7 +2072,7 @@ CREATE TABLE public.users (
otp_backup_codes character varying[], otp_backup_codes character varying[],
last_renamed_at timestamp without time zone DEFAULT '1970-01-01 00:00:00'::timestamp without time zone NOT NULL, last_renamed_at timestamp without time zone DEFAULT '1970-01-01 00:00:00'::timestamp without time zone NOT NULL,
forced_filter_id bigint, forced_filter_id bigint,
confirmed_at timestamp(0) without time zone, confirmed_at timestamp without time zone,
senior_staff boolean DEFAULT false, senior_staff boolean DEFAULT false,
description character varying, description character varying,
scratchpad character varying, scratchpad character varying,
@ -2200,7 +2122,7 @@ CREATE TABLE public.versions (
event character varying NOT NULL, event character varying NOT NULL,
whodunnit character varying, whodunnit character varying,
object text, object text,
created_at timestamp without time zone created_at timestamp without time zone NOT NULL
); );
@ -3318,13 +3240,6 @@ CREATE INDEX index_channels_on_is_live ON public.channels USING btree (is_live);
CREATE INDEX index_channels_on_last_fetched_at ON public.channels USING btree (last_fetched_at); CREATE INDEX index_channels_on_last_fetched_at ON public.channels USING btree (last_fetched_at);
--
-- Name: index_channels_on_next_check_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_channels_on_next_check_at ON public.channels USING btree (next_check_at);
-- --
-- Name: index_comments_on_created_at; Type: INDEX; Schema: public; Owner: - -- Name: index_comments_on_created_at; Type: INDEX; Schema: public; Owner: -
-- --
@ -3780,13 +3695,6 @@ CREATE INDEX index_images_on_featured_on ON public.images USING btree (featured_
CREATE INDEX index_images_on_image_orig_sha512_hash ON public.images USING btree (image_orig_sha512_hash); CREATE INDEX index_images_on_image_orig_sha512_hash ON public.images USING btree (image_orig_sha512_hash);
--
-- Name: index_images_on_tag_ids; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_images_on_tag_ids ON public.images USING gin (tag_ids);
-- --
-- Name: index_images_on_updated_at; Type: INDEX; Schema: public; Owner: - -- Name: index_images_on_updated_at; Type: INDEX; Schema: public; Owner: -
-- --
@ -3878,13 +3786,6 @@ CREATE UNIQUE INDEX index_poll_votes_on_poll_option_id_and_user_id ON public.pol
CREATE INDEX index_poll_votes_on_user_id ON public.poll_votes USING btree (user_id); CREATE INDEX index_poll_votes_on_user_id ON public.poll_votes USING btree (user_id);
--
-- Name: index_polls_on_deleted_by_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_polls_on_deleted_by_id ON public.polls USING btree (deleted_by_id) WHERE (deleted_by_id IS NOT NULL);
-- --
-- Name: index_polls_on_topic_id; Type: INDEX; Schema: public; Owner: - -- Name: index_polls_on_topic_id; Type: INDEX; Schema: public; Owner: -
-- --
@ -3948,13 +3849,6 @@ CREATE INDEX index_reports_on_open ON public.reports USING btree (open);
CREATE INDEX index_reports_on_user_id ON public.reports USING btree (user_id); CREATE INDEX index_reports_on_user_id ON public.reports USING btree (user_id);
--
-- Name: index_roles_on_name_and_resource_type_and_resource_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_roles_on_name_and_resource_type_and_resource_id ON public.roles USING btree (name, resource_type, resource_id);
-- --
-- Name: index_site_notices_on_start_date_and_finish_date; Type: INDEX; Schema: public; Owner: - -- Name: index_site_notices_on_start_date_and_finish_date; Type: INDEX; Schema: public; Owner: -
-- --
@ -4382,13 +4276,6 @@ CREATE INDEX index_versions_on_item_type_and_item_id ON public.versions USING bt
CREATE INDEX index_vpns_on_ip ON public.vpns USING gist (ip inet_ops); CREATE INDEX index_vpns_on_ip ON public.vpns USING gist (ip inet_ops);
--
-- Name: intensities_index; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX intensities_index ON public.images USING btree (se_intensity, sw_intensity, ne_intensity, nw_intensity, average_intensity);
-- --
-- Name: moderation_logs_created_at_index; Type: INDEX; Schema: public; Owner: - -- Name: moderation_logs_created_at_index; Type: INDEX; Schema: public; Owner: -
-- --
@ -4565,14 +4452,6 @@ ALTER TABLE ONLY public.messages
ADD CONSTRAINT fk_rails_2bcf7eed31 FOREIGN KEY (from_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE RESTRICT; ADD CONSTRAINT fk_rails_2bcf7eed31 FOREIGN KEY (from_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE RESTRICT;
--
-- Name: polls fk_rails_2bf9149369; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.polls
ADD CONSTRAINT fk_rails_2bf9149369 FOREIGN KEY (deleted_by_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE SET NULL;
-- --
-- Name: image_hides fk_rails_335978518a; Type: FK CONSTRAINT; Schema: public; Owner: - -- Name: image_hides fk_rails_335978518a; Type: FK CONSTRAINT; Schema: public; Owner: -
-- --
@ -5447,3 +5326,4 @@ INSERT INTO public."schema_migrations" (version) VALUES (20211219194836);
INSERT INTO public."schema_migrations" (version) VALUES (20220321173359); INSERT INTO public."schema_migrations" (version) VALUES (20220321173359);
INSERT INTO public."schema_migrations" (version) VALUES (20240723122759); INSERT INTO public."schema_migrations" (version) VALUES (20240723122759);
INSERT INTO public."schema_migrations" (version) VALUES (20240728191353); INSERT INTO public."schema_migrations" (version) VALUES (20240728191353);
INSERT INTO public."schema_migrations" (version) VALUES (20240818182358);