Как я могу использовать CURRVAL / RETURNING PostgreSql из другого php-файла?

Я бегу INSERT запрос из одного файла php, но затем мне нужно получить последний вставленный идентификатор из внешнего файла php, чтобы выполнить другой запрос на основе этого идентификатора. Как я могу осуществить это, используя CURRVAL или же RETURNING? Из внешнего файла php, если я сделаю что-то вроде

$result = pg_query($db,"SELECT CURRVAL('app.example_id_seq'), ... "); Я не получаю результатов.

2 ответа

Решение

Вы можете запросить последовательность, как если бы это была таблица:

SELECT last_value
FROM app.example_id_seq
WHERE is_called;

Это не даст никакого результата, если последовательность никогда не использовалась (тогда is_called является FALSE).

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

Не уверен, для чего эти точки дерева в вашем примере. Тем не мение:

select currval('app.example_id_seq'::regclass);

Должно сработать. Иногда это может потерпеть неудачу с:

ERROR:  55000: currval of sequence "example_id_seq" is not yet defined in this session

Так что ничего не называется nextval до currval, Но если вы позвонили insert into который работал, тот currval должен работать так же.

Начать использовать RETURNINGПожалуйста, посетите документы - есть примеры. В основном вы перечисляете имена столбцов, которые должны быть в результате вставки или обновления.

Другие вопросы по тегам