powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подскажите Плизззззз!
7 сообщений из 7, страница 1 из 1
Подскажите Плизззззз!
    #35230471
Vopros123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация следущая:
PSQL 8.2.5
есть 2 таблицы
делаю вставку в первую
следом надо сделать вставку во вторую с id-ом записи первой таблицы
Как мне узнать какой id получила запись первой таблицы???
(id это первичный ключ Serial)
Заранее спасибо :-)
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35230657
Kartas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
советую открыть доку на странице посвященной сиквенсам.
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35230665
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vopros123Ситуация следущая:
PSQL 8.2.5
есть 2 таблицы
делаю вставку в первую
следом надо сделать вставку во вторую с id-ом записи первой таблицы
Как мне узнать какой id получила запись первой таблицы???
(id это первичный ключ Serial)
Заранее спасибо :-)

Сначала получить nextval из последовательности, потом вставить запись с полученным значением в первую таблицу, потом - во вторую.
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35230750
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
seb=> begin;
BEGIN
seb=> create table t1 (id serial primary key, val text);
NOTICE:  CREATE TABLE создаст подразумеваемую последовательность "t1_id_seq" для serial-колонки "t1.id"
NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "t1_pkey" для таблицы "t1"
CREATE TABLE
seb=> create table t2 (id int references t1, val int);
CREATE TABLE
seb=> insert into t1 values (default, 'val 321');
INSERT  0   1 
seb=> insert into t2 values (currval(pg_get_serial_sequence('t1', 'id')),  123 );
INSERT  0   1 
seb=> select * from t1 join t2 using (id);
 id |   val   | val
----+---------+-----
   1  | val  321  |  123 
( 1  запись)

seb=> ROLLBACK ;


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35230874
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
однако тут нужна некая осторожность (т.е. понимание):
Код: plaintext
1.
2.
3.
4.
5.
BEGIN ;
insert into t1 (capt) Values ('test');
SELECT Currval(pg_get_serial_sequence('t1','id'));

ROLLBACK;
SELECT Currval(pg_get_serial_sequence('t1','id'));
как видим - транзакция откачена, но Currval честно выдает свое значение, которе
является "последним значением счетчика, присвоенном в текущей сессии", но не
является "последним значением serial-поля, присвоенном..."
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35230983
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже 500 раз за последние полгода спрашивали... Используйте INSERT ... RETURNING
...
Рейтинг: 0 / 0
Подскажите Плизззззз!
    #35231106
Vopros123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное всем за ответы :-)
Очень презнателен
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подскажите Плизззззз!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]