diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index e8684cc8..1c8a1987 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -241,6 +241,13 @@ if (isset($_GET["pgsql"])) { $this->types[lang('User types')] = array_flip($types); } + function insertSql($table, $set) { + $auto_increment = array_filter(fields($table), function ($field) { + return $field['auto_increment']; + }); + return parent::insertSql($table, $set) . (count($auto_increment) == 1 ? " RETURNING " . idf_escape(key($auto_increment)) : ""); + } + function insertUpdate($table, $rows, $primary) { global $connection; foreach ($rows as $set) { @@ -781,7 +788,7 @@ ORDER BY SPECIFIC_NAME'); } function last_id($result) { - return 0; // there can be several sequences + return (is_object($result) ? $result->fetch_column(0) : 0); } function explain($connection, $query) { diff --git a/adminer/include/driver.inc.php b/adminer/include/driver.inc.php index ae9289cf..75b462ab 100644 --- a/adminer/include/driver.inc.php +++ b/adminer/include/driver.inc.php @@ -139,10 +139,19 @@ abstract class SqlDriver { * @return bool */ function insert($table, $set) { - return queries("INSERT INTO " . table($table) . ($set + return queries($this->insertSql($table, $set)); + } + + /** Get SQL query to insert data into table + * @param string + * @param array same as insert() + * @return string + */ + protected function insertSql($table, $set) { + return "INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : " DEFAULT VALUES" - )); + ); } /** Insert or update data in table diff --git a/adminer/include/pdo.inc.php b/adminer/include/pdo.inc.php index 107ac80a..51171cc1 100644 --- a/adminer/include/pdo.inc.php +++ b/adminer/include/pdo.inc.php @@ -87,6 +87,10 @@ if (extension_loaded('pdo')) { return $this->fetch(\PDO::FETCH_NUM); } + function fetch_column($field) { + return $this->fetchColumn($field); + } + function fetch_field() { $row = (object) $this->getColumnMeta($this->_offset++); $row->orgtable = $row->table; diff --git a/changes.txt b/changes.txt index 65919e81..11bc3853 100644 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,5 @@ Adminer dev: +PostgreSQL: Display auto_increment of inserted rows Adminer 5.0.6 (released 2025-03-17): Align numbers right (bug #912)