Skip to content

Commit 2f8f422

Browse files
committed
slonik_build_env was failing on PG11+ because the relhaspkey column no longer exists Conflicts: RELEASE
1 parent d31094f commit 2f8f422

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

tools/altperl/slonik_build_env.pl

+28-2
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,40 @@
6464
# Read in all the user 'normal' tables in @schema (public by default).
6565
# put all schemas between single quotes for the query
6666
my @protected_schema=map("'".$_."'",@schema);
67-
my $tableQuery = $dbh->prepare( "
67+
68+
69+
my $server_version_query = $dbh->prepare("show server_version_num")
70+
or die("unable to determine server version");
71+
$server_version_query->execute() or die "unable to determine server version";
72+
my $version_row = $server_version_query->fetchrow_arrayref();
73+
my $server_version = @$version_row[0];
74+
$server_version_query->finish();
75+
76+
77+
my $tableQuery;
78+
if ($server_version >= 110000) {
79+
$tableQuery = $dbh->prepare("
80+
SELECT n.nspname || '.' || c.relname,c.relkind,
81+
EXISTS (SELECT 1 FROM pg_constraint WHERE contype='p' AND conrelid=c.oid) AS relhaspkey
82+
FROM pg_namespace n ,pg_class c
83+
WHERE c.reltype > 0
84+
AND c.relnamespace = n.oid
85+
AND (c.relkind = 'r' OR c.relkind = 'S')
86+
AND n.nspname IN (" . join(',',@protected_schema) . ")
87+
AND n.oid = c.relnamespace;
88+
");
89+
}
90+
else {
91+
92+
$tableQuery = $dbh->prepare( "
6893
SELECT pg_namespace.nspname || '.' || pg_class.relname,pg_class.relkind,pg_class.relhaspkey
6994
FROM pg_namespace,pg_class
7095
WHERE pg_class.reltype > 0
7196
AND pg_class.relnamespace = pg_catalog.pg_namespace.oid
7297
AND (pg_class.relkind = 'r' OR pg_class.relkind = 'S')
7398
AND pg_namespace.nspname IN (" . join(',',@protected_schema) . ") AND pg_namespace.oid = pg_class.relnamespace"
74-
);
99+
);
100+
}
75101

76102
die "prepare(tableQuery): $DBI::errstr"
77103
if ( !defined($tableQuery) || $DBI::err );

0 commit comments

Comments
 (0)