postgresql эквивалентно $ mysqli-> insert_id

Есть ли эквивалент $ mysqli-> insert_id в postgresql 9.3? Я импортирую в одну таблицу, но мне нужно взять последний первичный ключ, созданный в таблице, и применить его как внешний ключ во второй таблице? Таблица 1 —-> Таблица 2 для завершения записи.

Немного больше информации:

$sql = "INSERT INTO sheet_tbl (site_id, eventdate) VALUES ('$_POST[site_id]','$_POST[eventdate]') returning id"; 

** Используя sql выше, я вставляю свою запись, как бы использовать ее в моей следующей вставке SQL. Если я использую возвращаемый идентификатор, где хранится этот идентификатор, как его использовать в другом заявлении INSERT?

  $sql1 = "INSERT INTO record_tbl (line, taxom_id, number_of_taxom, sheet_id) VALUES (1,1,'$_POST[cased_numbers]','$_POST[sheet_id]')"; $result = pg_query($sql1); 

    Если вам нужен PK строки, которую вы только что вставили (или любое выражение, используя столбцы таблицы), вы можете использовать предложение RETURNING. Документы: условие возврата

    Например.

     test=# create table a (id serial, val text); NOTICE: CREATE TABLE will create implicit sequence "a_id_seq" for serial column "a.id" CREATE TABLE test=# insert into a (val) values ('foo') returning id; id ---- 1 

    В PostgreSQL значения первичного ключа обычно исходят из последовательности как наилучшей практики. Вы можете использовать SELECT currval('sequence_name'); чтобы получить последнее значение определенной последовательности или SELECT lastval() чтобы получить последнее значение любой последовательности. Подробнее см. В официальных документах .

    Вы можете увидеть пример работы currval в этом currval SQL . Имейте в виду, что требуется использовать последовательность уже в сеансе, как это делает вставка. Вызов currval когда последовательность не использовалась в текущем сеансе, является ошибкой.

    Если вы используете PDO в PHP, метод lastInsertId поддерживается PostgreSQL, но вам требуется указать идентификатор последовательности. Доступны дополнительные документы и обсуждение PDO :: lastInsertId .

    Как предлагает @bma, использование предложения RETURNING в INSERT является хорошим способом вернуть значение первичного ключа только что вставленной строки:

     insert into a (val) values ('foo') returning id; 

    Кроме того, ваш синтаксис показывает, что он может быть уязвим для атаки SQL-инъекции, потому что вы передаете неутвержденный ввод непосредственно в базу данных, не ускользая от него. Рассмотрите возможность использования pg_query_params или другой альтернативы, чтобы убедиться, что ваши входы правильно экранированы.

    Фактически вы можете сделать это в одном запросе:

     WITH sheet AS( INSERT INTO sheet_tbl (site_id, eventdate) VALUES ('$_POST[site_id]','$_POST[eventdate]') returning id ) INSERT INTO record_tbl select 1,1,'$_POST[cased_numbers]',id FROM sheet;