Почему не могу присвоить primary key не id полю?
Есть вот така таблица
CREATE TABLE users
(
id serial not null,
chat_id bigint not null primary key,
username varchar(255),
full_name varchar(255)
);
Я хочу присвоить полю chat_id prymary key, но когда запускаю питон скрипт по созданию бд, получаю вот такую ошибку
asyncpg.exceptions. InvalidForeignKeyError: there is no unique constraint matching given keys for referenced table "users"
Могу ли я присвоить prymary key не id полю?
Ответы (1 шт):
melkij=> CREATE TABLE users
(
id serial not null,
chat_id bigint not null primary key,
username varchar(255),
full_name varchar(255)
);
CREATE TABLE
melkij=> \d users
Таблица "public.users"
Столбец | Тип | Правило сортировки | Допустимость NULL | По умолчанию
-----------+------------------------+--------------------+-------------------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
chat_id | bigint | | not null |
username | character varying(255) | | |
full_name | character varying(255) | | |
Индексы:
"users_pkey" PRIMARY KEY, btree (chat_id)
Никаких проблем.
InvalidForeignKeyError: there is no unique constraint matching given keys for referenced table "users"
Если всё-таки прочитать сообщение об ошибке - то будет видно что она относится к механизму foreign keys. Где-то в местах, не имеющих отношения к этому create table, вы пытаетесь создать внешний ключ. Внешний ключ обязан ссылаться на поля, являющиеся уникальными в таблице, для чего требуется существование первичного или уникального ключа по этой комбинации полей. Или по одному полю в простом и наиболее распространённом случае.
Точный текст запроса, приводящий к ошибке, вы можете достать из лога СУБД.