DispelEvilBot/sql/V12__constraints_indexes.sql

37 lines
1.9 KiB
SQL

-- Ключи и индексы.
-- Схема исторически велась без ключей, поэтому перед добавлением PK убираем
-- возможные дубли (важно при загрузке данных из старой БД).
-- tg_users
DELETE FROM bot.tg_users a USING bot.tg_users b
WHERE a.ctid < b.ctid AND a.id_user = b.id_user;
ALTER TABLE bot.tg_users ALTER COLUMN id_user SET NOT NULL;
ALTER TABLE bot.tg_users ADD CONSTRAINT tg_users_pkey PRIMARY KEY (id_user);
-- de_users
DELETE FROM bot.de_users a USING bot.de_users b
WHERE a.ctid < b.ctid AND a.id_user = b.id_user;
ALTER TABLE bot.de_users ALTER COLUMN id_user SET NOT NULL;
ALTER TABLE bot.de_users ADD CONSTRAINT de_users_pkey PRIMARY KEY (id_user);
-- unsubscribe
DELETE FROM bot.unsubscribe a USING bot.unsubscribe b
WHERE a.ctid < b.ctid AND a.id_user = b.id_user;
ALTER TABLE bot.unsubscribe ALTER COLUMN id_user SET NOT NULL;
ALTER TABLE bot.unsubscribe ADD CONSTRAINT unsubscribe_pkey PRIMARY KEY (id_user);
-- Суррогатные ключи
ALTER TABLE bot.actions ADD CONSTRAINT actions_pkey PRIMARY KEY (id_action);
ALTER TABLE bot.titles ADD CONSTRAINT titles_pkey PRIMARY KEY (id_title);
ALTER TABLE bot.donats ADD CONSTRAINT donats_pkey PRIMARY KEY (id_donat);
ALTER TABLE bot.money ADD CONSTRAINT money_pkey PRIMARY KEY (id_money);
ALTER TABLE bot.eggs ADD CONSTRAINT eggs_pkey PRIMARY KEY (id_egg);
-- Индексы
CREATE INDEX IF NOT EXISTS idx_money_user ON bot.money (id_user);
CREATE INDEX IF NOT EXISTS idx_eggs_user_action ON bot.eggs (id_user, id_action);
CREATE INDEX IF NOT EXISTS idx_messages_user ON bot.messages (id_user);
CREATE INDEX IF NOT EXISTS idx_messages_dt ON bot.messages (dt);
CREATE INDEX IF NOT EXISTS idx_purifications_user ON bot.purifications (id_user);
CREATE INDEX IF NOT EXISTS idx_de_users_nick ON bot.de_users (nick);