Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
09.03.2007, 10:20
|
|||
|---|---|---|---|
|
|||
триггер vs автоинкремент |
|||
|
#18+
Добрый день. Вставляю массив данных в мастер/детаил таблицы. Значения для ключевых полей берутся из последовательностей (sequence). Но первичные ключи были созданы как bigserial, таким образом nextvalue получается выборкой следующего значения из последовательности: nextval('test_id_seq'::regclass) Конечно, можно спокойно получить curval, и вставить его значение в поля -- внешние ключи. Но меня всё время беспокоит такой вопрос, а что, если в таблицу произойдёт вставка? Не логичнее всё же написать триггер, в котором проводить анализ на null, что-то вроде if new.id is null then new.id := nextval('test_id_seq') В таком случае, я смогу самостоятельно получать nextval, а затем вставлять полученное значение как в мастер, так и в детаил таблицы. На мой взгляд это правильнее. А что скажут уважаемые коллеги? Вся вставка будет происходить в теле хранимой процедуры. Нужно ли мне отказаться от автоинкрементных полей в пользу триггеров, или достаточно получать интересующее значение из curval? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2007, 10:49
|
|||
|---|---|---|---|
|
|||
триггер vs автоинкремент |
|||
|
#18+
Если вставка будет полностью "на совести" хп, то зачем вообще нужен триггер? можно использовать след. достаточно прозрачный вариант с хп Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2007, 19:08
|
|||
|---|---|---|---|
|
|||
триггер vs автоинкремент |
|||
|
#18+
Paramedic Но меня всё время беспокоит такой вопрос, а что, если в таблицу произойдёт вставка? Вас беспокоит, что будет если в другой транзакции добавиться еще одна запись во время между вашими INSERTom и currval'ом? Если я правильно вас понял - то забейте на свои беспокойства. А что бы забить с большей уверенностью, перечетайте доку. currval возвращает последнее значение для текущей сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.03.2007, 09:40
|
|||
|---|---|---|---|
|
|||
триггер vs автоинкремент |
|||
|
#18+
Вопрос в догонку а как получить новый айди записи, если он создался автоматом (в тригере)? чтобы потом его использовать в фиребирд это insert into table returning id; и потом айди использовать далее.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.03.2007, 10:09
|
|||
|---|---|---|---|
триггер vs автоинкремент |
|||
|
#18+
в пг с 8.2.чегото вроде бы тоже появилось (37.6.3. Executing a Query with a Single-Row Result) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.03.2007, 14:27
|
|||
|---|---|---|---|
|
|||
триггер vs автоинкремент |
|||
|
#18+
INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ AS output_name ] [, ...] ] поддерживается ;) буду теперь разбираться как заменять генераторы.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&mobile=1&tid=2005608]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 394ms |

| 0 / 0 |
