Невозможно вставить в таблицу, где столбец является внешним ключом
Вставляя в мою таблицу, я получаю эту ошибку:
ОШИБКА: столбец "brandid" отношения "Item" не существует
Столбец brandId имеет ограничение внешнего ключа, которое связывает его с идентификатором другой таблицы.
таблица, в которую я вставляю, определяется так:
Column | Type | Modifiers | Storage | Stats target | Description
---------+---------+-----------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('"Item_id_seq"'::regclass) | plain | |
name | text | not null | extended | |
price | money | not null | plain | |
sizes | json | not null | extended | |
brandId | integer | not null | plain | |
deptId | integer | not null | plain | |
Indexes:
"item_pk" PRIMARY KEY, btree (id)
Foreign-key constraints:
"Item_fk0" FOREIGN KEY ("brandId") REFERENCES "Brand"(id)
"Item_fk1" FOREIGN KEY ("deptId") REFERENCES "Department"(id)
Я пытаюсь сделать следующее выражение вставки:
INSERT INTO "Item" (name, price, sizes, brandId, deptId) VALUES
('Air Force 1', '120.00', '{"12" : 1 , "10" : 12}',
(SELECT id FROM "Brand" WHERE name= 'Nike'),
(SELECT id FROM "Department" WHERE name= 'Mens Shoes'));
Все столбцы идентификаторов в моей базе данных имеют тип serial.
Таблицы брендов и отделов уже заполнены, и эти избранные утверждения были протестированы и работают правильно.
1 ответ
Решение
Ошибка говорит вам, что pgsql не может найти поле brandid (вместо brandId, как вы ожидали). Разница в том, что я против I. Попробуйте поставить имя поля в запросе вставки в двойных кавычках
INSERT INTO "Item" (name, price, sizes, "brandId", "deptId") VALUES
('Air Force 1', '120.00', '{"12" : 1 , "10" : 12}',
(SELECT id FROM "Brand" WHERE name= 'Nike'),
(SELECT id FROM "Department" WHERE name= 'Mens Shoes'));