2011-01-19 1 views
1

Здравствуйте люди Checkout этот сценарийВставка 2 строки, каждая из которых в разных таблицах, где одна строка refrences другая первичный ключ

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

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

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

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

Должен ли я вставить в таблицу один затем ВЫБРАТЬ-запрос первичного ключа вступления в затем вставить строку Таблица 2 с результатом PKEY?

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

ответ

2

Я предлагаю смотреть http://wiki.postgresql.org/wiki/FAQ

сайт является полезным ресурсом, чтобы пройти, чтобы ознакомиться с PostgreSQL

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

Самый простой способ, чтобы получить присваивались значения с ВОЗВРАЩАЕТСЯ. Используя в качестве примера таблицы в предыдущего вопроса, это будет выглядеть это:

INSERT INTO человек (имя) ЗНАЧЕНИЯ («Блез Паскаль») RETURNING идентификатора;

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

+1

Я согласен: с помощью 'RETURNING' это самый безопасный способ сделать это. –

1

Если значение не требуется 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...) 
Смежные вопросы