diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 8fe22073..f4caf71a 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -423,12 +423,14 @@ ORDER BY a.attnum" $relname = $row["relname"]; $return[$relname]["type"] = ($row["indispartial"] ? "INDEX" : ($row["indisprimary"] ? "PRIMARY" : ($row["indisunique"] ? "UNIQUE" : "INDEX"))); $return[$relname]["columns"] = array(); - foreach (explode(" ", $row["indkey"]) as $indkey) { - $return[$relname]["columns"][] = $columns[$indkey]; - } $return[$relname]["descs"] = array(); - foreach (explode(" ", $row["indoption"]) as $indoption) { - $return[$relname]["descs"][] = ($indoption & 1 ? '1' : null); // 1 - INDOPTION_DESC + if ($row["indkey"]) { + foreach (explode(" ", $row["indkey"]) as $indkey) { + $return[$relname]["columns"][] = $columns[$indkey]; + } + foreach (explode(" ", $row["indoption"]) as $indoption) { + $return[$relname]["descs"][] = ($indoption & 1 ? '1' : null); // 1 - INDOPTION_DESC + } } $return[$relname]["lengths"] = array(); } diff --git a/adminer/indexes.inc.php b/adminer/indexes.inc.php index 4aed4a49..119e59fe 100644 --- a/adminer/indexes.inc.php +++ b/adminer/indexes.inc.php @@ -40,22 +40,22 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) { } } - if ($columns) { - $existing = $indexes[$name]; - if ($existing) { - ksort($existing["columns"]); - ksort($existing["lengths"]); - ksort($existing["descs"]); - if ($index["type"] == $existing["type"] - && array_values($existing["columns"]) === $columns - && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths) - && array_values($existing["descs"]) === $descs - ) { - // skip existing index - unset($indexes[$name]); - continue; - } + $existing = $indexes[$name]; + if ($existing) { + ksort($existing["columns"]); + ksort($existing["lengths"]); + ksort($existing["descs"]); + if ($index["type"] == $existing["type"] + && array_values($existing["columns"]) === $columns + && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths) + && array_values($existing["descs"]) === $descs + ) { + // skip existing index + unset($indexes[$name]); + continue; } + } + if ($columns) { $alter[] = array($index["type"], $name, $set); } } diff --git a/changes.txt b/changes.txt index b5bb54d6..1d657c3e 100644 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,5 @@ Adminer dev: +PostgreSQL: Do not alter indexes with expressions PostgreSQL: Fix export of indexes with expressions (bug #768) SQLite: Support CHECK constraint SQLite: Add command Check tables