postgres.git / summary / log / commit / refs

commit    70bfc5ae537c8bfeed4849b7d9f814de89a155fe
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Wed Oct 27 07:02:19 2021 +0000
First released in: 15.0

    Add test for copy of shared dependencies from template database
    
    As 98ec35b has proved, there has never been any coverage in this area of
    the code.  This commit adds a new TAP test with a template database that
    includes a small set of shared dependencies copied to a new database.
    The test is added in createdb, where we have never tested that -T
    generates a query with TEMPLATE, either.
    
    Reviewed-by: Tom Lane
    Discussion: https://postgr.es/m/YXDTl+PfSnqmbbkE@paquier.xyz


src/bin/scripts/t/020_createdb.pl | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl index cb8e26c7731..6bcc59de08d 100644 --- a/src/bin/scripts/t/020_createdb.pl +++ b/src/bin/scripts/t/020_createdb.pl @@ -6,7 +6,7 @@ use warnings; use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; -use Test::More tests => 22; +use Test::More tests => 25; program_help_ok('createdb'); program_version_ok('createdb'); @@ -28,6 +28,30 @@ $node->issues_sql_like( $node->command_fails([ 'createdb', 'foobar1' ], 'fails if database already exists'); +# Check use of templates with shared dependencies copied from the template. +my ($ret, $stdout, $stderr) = $node->psql( + 'foobar2', + 'CREATE ROLE role_foobar; +CREATE TABLE tab_foobar (id int); +ALTER TABLE tab_foobar owner to role_foobar; +CREATE POLICY pol_foobar ON tab_foobar FOR ALL TO role_foobar;'); +$node->issues_sql_like( + [ 'createdb', '-l', 'C', '-T', 'foobar2', 'foobar3' ], + qr/statement: CREATE DATABASE foobar3 TEMPLATE foobar2/, + 'create database with template'); +($ret, $stdout, $stderr) = $node->psql( + 'foobar3', + "SELECT pg_describe_object(classid, objid, objsubid) AS obj, + pg_describe_object(refclassid, refobjid, 0) AS refobj + FROM pg_shdepend s JOIN pg_database d ON (d.oid = s.dbid) + WHERE d.datname = 'foobar3' ORDER BY obj;", on_error_die => 1); +chomp($stdout); +like( + $stdout, + qr/^policy pol_foobar on table tab_foobar\|role role_foobar +table tab_foobar\|role role_foobar$/, + 'shared dependencies copied over to target database'); + # Check quote handling with incorrect option values. $node->command_checks_all( [ 'createdb', '--encoding', "foo'; SELECT '1", 'foobar2' ], [parent: 5a2832465fd8]