Вставка 2 строк, каждая в разные таблицы, где одна строка ссылается на первичный ключ другой - PullRequest
1 голос
/ 19 января 2011

Привет, ребята Оформить заказ по этому сценарию

Столбцы таблицы 1 -> | table_1_id (pkey) | some_column | комментарии |

Таблица 2 столбцы -> | table_2_id (pkey) | some_other_column | table_1_id (fkey) | комментарии |

Все первичные ключи имеют серийный или автоматический номер. 3-й столбец таблицы 2 - это fk, который ссылается на первичный ключ таблицы 1.

Я хотел бы вставлять строки в обе программы программно (из приложения c ++)

Нужно ли вставлять в таблицу один, затем SELECT-запросить первичный ключ записи, а затем вставить строку таблицы 2 с результатом pkey?

Есть ли более эффективный способ справиться с этим? Скажем, используя почти 2 запроса?

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Я бы предложил посмотреть http://wiki.postgresql.org/wiki/FAQ

Сайт - полезный ресурс для знакомства с PostgreSQL

В частности, раздел Как получить значение вставки SERIAL?

Самый простой способ - получить присвоенное значение SERIAL с помощью RETURNING. Используя таблицу примеров в предыдущий вопрос, это будет выглядеть это:

ВСТАВИТЬ В ЛИЧНОСТЬ (ФИО) ('Blaise Pascal') RETURNING id;

Вы также можете вызвать nextval () и использовать это значение в INSERT или вызвать currval () после INSERT.

1 голос
/ 19 января 2011

Если вам не нужно значение table_1_id в вашем приложении, вы можете пропустить его получение полностью:

INSERT INTO table_1(cols...) VALUES(vals...)
INSERT INTO table_2(table_1_id, cols...) VALUES(currval('table_1_table_1_id_seq'), vals...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...