diff --git a/manifests/server/database.pp b/manifests/server/database.pp index 50699d995c..8e6f5e5f6e 100644 --- a/manifests/server/database.pp +++ b/manifests/server/database.pp @@ -78,10 +78,15 @@ } if $comment { + # The shobj_description function was only introduced with 8.2 + $comment_information_function = $version ? { + '8.1' => 'obj_description', + default => 'shobj_description', + } Exec[ $createdb_command ]-> postgresql_psql {"COMMENT ON DATABASE ${dbname} IS '${comment}'": - unless => "SELECT description FROM pg_description JOIN pg_database ON objoid = pg_database.oid WHERE datname = '${dbname}' AND description = '${comment}'", - db => $dbname, + unless => "SELECT pg_catalog.${comment_information_function}(d.oid, 'pg_database') as \"Description\" FROM pg_catalog.pg_database d WHERE datname = '${dbname}' AND pg_catalog.${comment_information_function}(d.oid, 'pg_database') = '${comment}'", + db => $dbname, } } diff --git a/spec/acceptance/db_spec.rb b/spec/acceptance/db_spec.rb index 92827ae211..205a50b47f 100644 --- a/spec/acceptance/db_spec.rb +++ b/spec/acceptance/db_spec.rb @@ -29,7 +29,14 @@ class { 'postgresql::server': } expect(r.stdout).to match(/\(1 row\)/) end - psql('--command="SELECT pg_catalog.shobj_description(d.oid, \'pg_database\') FROM pg_catalog.pg_database d WHERE datname = \'postgresql_test_db\' AND pg_catalog.shobj_description(d.oid, \'pg_database\') = \'testcomment\'"') do |r| + result = shell('psql --version') + version = result.stdout.match(%r{\s(8\.\d)})[1] + if version > "8.1" + comment_information_function = "shobj_description" + else + comment_information_function = "obj_description" + end + psql("--dbname postgresql_test_db --command=\"SELECT pg_catalog.#{comment_information_function}(d.oid, 'pg_database') FROM pg_catalog.pg_database d WHERE datname = 'postgresql_test_db' AND pg_catalog.#{comment_information_function}(d.oid, 'pg_database') = 'testcomment'\"") do |r| expect(r.stdout).to match(/\(1 row\)/) end ensure