Отже, з цими різними методами є деякі проблеми:
Currval отримує лише останнє значення, сформоване в поточному сеансі - що чудово, якщо у вас немає нічого іншого, що генерує значення, але у випадках, коли ви можете викликати тригер та / або покращити послідовність не раз у поточній транзакції, це не збирається повертати правильне значення. Це не проблема для 99% людей там - але це щось, що варто враховувати.
Найкращий спосіб отримати унікальний ідентифікатор, присвоєний після операції вставки, - за допомогою пункту RETURNING. Приклад нижче передбачає, що стовпець, прив'язаний до послідовності, називається "id":
insert into table A (cola,colb,colc) values ('val1','val2','val3') returning id;
Зауважте, що корисність пункту ПОВЕРНЕННЯ виходить за рамки простого отримання послідовності, оскільки це також:
- Повернені значення, які були використані для "остаточної вставки" (після, наприклад, ДО ПЕРЕДУМНОГО тригера, можливо, змінили дані, що вставляються.)
Поверніть значення, які видаляли:
видалити з таблиці A, де id> 100 повертається *
Повернути змінені рядки після ОНОВЛЕННЯ:
таблиця оновлення Набір X = 'y', де blah = 'blech' повертається *
Використовуйте результат видалення для оновлення:
З A as (видалити * з таблиці A як ідентифікатор, що повертається) оновлення B set delete = true, де id in (виберіть id з A);