From a165d4ed8145b8c71ee1b6df866afa9bea9af4b5 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Mon, 14 Apr 2025 16:41:31 +0200 Subject: [PATCH] PostgreSQL: Export PARTITION BY (bug #1031) --- adminer/drivers/pgsql.inc.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index afaacea9..e8ea1714 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -936,8 +936,18 @@ AND typelem = 0" foreach (driver()->checkConstraints($table) as $conname => $consrc) { $return_parts[] = "CONSTRAINT " . idf_escape($conname) . " CHECK $consrc"; } + $return .= implode(",\n ", $return_parts) . "\n)"; - $return .= implode(",\n ", $return_parts) . "\n) WITH (oids = " . ($status['Oid'] ? 'true' : 'false') . ");"; + $table_oid = driver()->tableOid($status['Name']); + $row = connection()->query("SELECT * FROM pg_partitioned_table WHERE partrelid = $table_oid")->fetch_assoc(); + if ($row) { + $attrs = get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $row[partrelid] AND attnum IN (" . str_replace(" ", ", ", $row["partattrs"]) . ")"); //! ordering + $by = array('h' => 'HASH', 'l' => 'LIST', 'r' => 'RANGE'); + $return .= "\nPARTITION BY $by[partstrat](" . implode(", ", array_map('Adminer\idf_escape', $attrs)) . ")"; + } + //! parse pg_class.relpartbound to create PARTITION OF + + $return .= "\nWITH (oids = " . ($status['Oid'] ? 'true' : 'false') . ");"; // comments for table & fields if ($status['Comment']) {