From c91185c435053f5b9bf1d706eb22a61407205448 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Tue, 2 Aug 2011 17:36:12 +0200 Subject: [PATCH] Fix foreign key schema --- adminer/drivers/pgsql.inc.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index c5a0c813..940d7659 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -271,7 +271,7 @@ ORDER BY a.attnum" function foreign_keys($table) { global $on_actions; $return = array(); - foreach (get_rows("SELECT conname, (SELECT nspname FROM pg_namespace WHERE oid = connamespace) AS ns, pg_get_constraintdef(oid) AS definition + foreach (get_rows("SELECT conname, pg_get_constraintdef(oid) AS definition FROM pg_constraint WHERE conrelid = (SELECT oid FROM pg_class WHERE relname = " . q($table) . ") AND contype = 'f'::char @@ -279,6 +279,10 @@ ORDER BY conkey, conname") as $row) { if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) { $row['source'] = array_map('trim', explode(',', $match[1])); $row['table'] = $match[2]; + if (preg_match('~(.+)\.(.+)~', $match[2], $match2)) { + $row['ns'] = $match2[1]; + $row['table'] = $match2[2]; + } $row['target'] = array_map('trim', explode(',', $match[3])); $row['on_delete'] = (preg_match('~ON DELETE (' . implode('|', $on_actions) . ')~', $match[4], $match2) ? $match2[1] : ''); $row['on_update'] = (preg_match('~ON UPDATE (' . implode('|', $on_actions) . ')~', $match[4], $match2) ? $match2[1] : '');