-- Ключи и индексы. -- Схема исторически велась без ключей, поэтому перед добавлением 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);