From: Steve Singer Date: Sun, 23 Aug 2020 02:38:11 +0000 (-0400) Subject: Fix https://github.com/ssinger/slony1-engine/issues/19 X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=2f8f422db02e874b6b557129201d4a21bcb76420;p=slony1-engine.git Fix https://github.com/ssinger/slony1-engine/issues/19 slonik_build_env was failing on PG11+ because the relhaspkey column no longer exists Conflicts: RELEASE --- diff --git a/tools/altperl/slonik_build_env.pl b/tools/altperl/slonik_build_env.pl index 4c01a094..09828906 100644 --- a/tools/altperl/slonik_build_env.pl +++ b/tools/altperl/slonik_build_env.pl @@ -64,14 +64,40 @@ die "connect: $DBI::errstr" if ( !defined($dbh) || $DBI::err ); # Read in all the user 'normal' tables in @schema (public by default). # put all schemas between single quotes for the query my @protected_schema=map("'".$_."'",@schema); -my $tableQuery = $dbh->prepare( " + + +my $server_version_query = $dbh->prepare("show server_version_num") + or die("unable to determine server version"); +$server_version_query->execute() or die "unable to determine server version"; +my $version_row = $server_version_query->fetchrow_arrayref(); +my $server_version = @$version_row[0]; +$server_version_query->finish(); + + +my $tableQuery; +if ($server_version >= 110000) { + $tableQuery = $dbh->prepare(" +SELECT n.nspname || '.' || c.relname,c.relkind, + EXISTS (SELECT 1 FROM pg_constraint WHERE contype='p' AND conrelid=c.oid) AS relhaspkey +FROM pg_namespace n ,pg_class c +WHERE c.reltype > 0 +AND c.relnamespace = n.oid +AND (c.relkind = 'r' OR c.relkind = 'S') +AND n.nspname IN (" . join(',',@protected_schema) . ") +AND n.oid = c.relnamespace; +"); +} +else { + + $tableQuery = $dbh->prepare( " SELECT pg_namespace.nspname || '.' || pg_class.relname,pg_class.relkind,pg_class.relhaspkey FROM pg_namespace,pg_class WHERE pg_class.reltype > 0 AND pg_class.relnamespace = pg_catalog.pg_namespace.oid AND (pg_class.relkind = 'r' OR pg_class.relkind = 'S') AND pg_namespace.nspname IN (" . join(',',@protected_schema) . ") AND pg_namespace.oid = pg_class.relnamespace" -); + ); +} die "prepare(tableQuery): $DBI::errstr" if ( !defined($tableQuery) || $DBI::err );