powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / триггер vs автоинкремент
6 сообщений из 6, страница 1 из 1
триггер vs автоинкремент
    #34379772
Paramedic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Вставляю массив данных в мастер/детаил таблицы. Значения для ключевых полей берутся из последовательностей (sequence).

Но первичные ключи были созданы как bigserial, таким образом nextvalue получается выборкой следующего значения из последовательности: nextval('test_id_seq'::regclass)

Конечно, можно спокойно получить curval, и вставить его значение в поля -- внешние ключи.

Но меня всё время беспокоит такой вопрос, а что, если в таблицу произойдёт вставка?

Не логичнее всё же написать триггер, в котором проводить анализ на null, что-то вроде

if new.id is null then new.id := nextval('test_id_seq')

В таком случае, я смогу самостоятельно получать nextval, а затем вставлять полученное значение как в мастер, так и в детаил таблицы. На мой взгляд это правильнее.

А что скажут уважаемые коллеги?

Вся вставка будет происходить в теле хранимой процедуры. Нужно ли мне отказаться от автоинкрементных полей в пользу триггеров, или достаточно получать интересующее значение из curval?
...
Рейтинг: 0 / 0
триггер vs автоинкремент
    #34379845
BlackDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вставка будет полностью "на совести" хп, то зачем вообще нужен триггер?
можно использовать след. достаточно прозрачный вариант с хп
Код: plaintext
1.
new_id := nextval('table_id_seq');
insert into table(id) values(new_id);
...
Рейтинг: 0 / 0
триггер vs автоинкремент
    #34381377
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Paramedic
Но меня всё время беспокоит такой вопрос, а что, если в таблицу произойдёт вставка?


Вас беспокоит, что будет если в другой транзакции добавиться еще одна запись во время между вашими INSERTom и currval'ом?
Если я правильно вас понял - то забейте на свои беспокойства. А что бы забить с большей уверенностью, перечетайте доку. currval возвращает последнее значение для текущей сессии.
...
Рейтинг: 0 / 0
триггер vs автоинкремент
    #34386052
GreyCardinal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в догонку
а как получить новый айди записи, если он создался автоматом (в тригере)?
чтобы потом его использовать
в фиребирд это
insert into table returning id;
и потом айди использовать далее....
...
Рейтинг: 0 / 0
триггер vs автоинкремент
    #34386160
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в пг с 8.2.чегото вроде бы тоже появилось (37.6.3. Executing a Query with a Single-Row Result)
...
Рейтинг: 0 / 0
триггер vs автоинкремент
    #34393452
GreyCardinal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ RETURNING * | output_expression [ AS output_name ] [, ...] ]

поддерживается ;)
буду теперь разбираться как заменять генераторы....
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / триггер vs автоинкремент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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