if ($ENV{with_icu} eq 'yes')
{ # This fails because template0 uses libc provider and has no ICU # locale set. It would succeed if template0 used the icu # provider. XXX Maybe split into multiple tests?
$node->command_fails(
[ 'createdb', '--template' => 'template0', '--encoding' => 'UTF8', '--locale-provider' => 'icu', 'foobar4',
], 'create database with ICU fails without ICU locale specified');
$node->command_fails_like(
[ 'createdb', '--template' => 'template0', '--locale-provider' => 'icu', '--encoding' => 'SQL_ASCII', 'foobarX',
],
qr/ERROR: encoding "SQL_ASCII" is not supported with ICU provider/, 'fails for encoding not supported by ICU');
# additional node, which uses the icu provider
my $node2 = PostgreSQL::Test::Cluster->new('icu');
$node2->init(extra => [ '--locale-provider=icu', '--icu-locale=en' ]);
$node2->start;
$node2->command_ok(
[ 'createdb', '--template' => 'template0', '--locale-provider' => 'libc', 'foobar55',
], 'create database with libc provider from template database with icu provider'
);
$node2->command_ok(
[ 'createdb', '--template' => 'template0', '--icu-locale' => 'en-US', 'foobar56',
], 'create database with icu locale from template database with icu provider'
);
# 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', '--locale' => 'C', '--template' => 'foobar2', 'foobar3' ],
qr/statement: CREATE DATABASE foobar3 TEMPLATE foobar2 LOCALE 'C'/, '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' ], 1,
[qr/^$/],
[qr/^createdb: error: "foo'; SELECT '1" is not a valid encoding name/s], 'createdb with incorrect --encoding');
$node->command_checks_all(
[ 'createdb', '--lc-collate', "foo'; SELECT '1", 'foobar2' ], 1,
[qr/^$/],
[
qr/^createdb: error: database creation failed: ERROR: invalid LC_COLLATE locale name|^createdb: error: database creation failed: ERROR: new collation \(foo'; SELECT '1\) is incompatible with the collation of the template database/s,
], 'createdb with incorrect --lc-collate');
$node->command_checks_all(
[ 'createdb', '--lc-ctype', "foo'; SELECT '1", 'foobar2' ], 1,
[qr/^$/],
[
qr/^createdb: error: database creation failed: ERROR: invalid LC_CTYPE locale name|^createdb: error: database creation failed: ERROR: new LC_CTYPE \(foo'; SELECT '1\) is incompatible with the LC_CTYPE of the template database/s,
], 'createdb with incorrect --lc-ctype');
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.