mirror of https://github.com/citusdata/citus.git
Fixes metadata sync
parent
641e413676
commit
473f6cbf05
|
@ -545,6 +545,23 @@ FreeDatabaseCollationInfo(DatabaseCollationInfo collInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static char *get_locale_provider_string(char datlocprovider)
|
||||||
|
{
|
||||||
|
switch (datlocprovider)
|
||||||
|
{
|
||||||
|
case 'c':
|
||||||
|
return "libc";
|
||||||
|
case 'i':
|
||||||
|
return "icu";
|
||||||
|
case 'l':
|
||||||
|
return "locale";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GenerateCreateDatabaseStatementFromPgDatabase is gets the pg_database tuple and returns the CREATE DATABASE statement
|
* GenerateCreateDatabaseStatementFromPgDatabase is gets the pg_database tuple and returns the CREATE DATABASE statement
|
||||||
*/
|
*/
|
||||||
|
@ -552,8 +569,6 @@ static char *
|
||||||
GenerateCreateDatabaseStatementFromPgDatabase(Form_pg_database databaseForm)
|
GenerateCreateDatabaseStatementFromPgDatabase(Form_pg_database databaseForm)
|
||||||
{
|
{
|
||||||
DatabaseCollationInfo collInfo = GetDatabaseCollation(databaseForm->oid);
|
DatabaseCollationInfo collInfo = GetDatabaseCollation(databaseForm->oid);
|
||||||
elog(LOG, "collInfo: %s %s %s %s", collInfo.collation, collInfo.ctype,
|
|
||||||
collInfo.icu_locale, collInfo.collversion);
|
|
||||||
|
|
||||||
StringInfoData str;
|
StringInfoData str;
|
||||||
initStringInfo(&str);
|
initStringInfo(&str);
|
||||||
|
@ -590,7 +605,7 @@ GenerateCreateDatabaseStatementFromPgDatabase(Form_pg_database databaseForm)
|
||||||
|
|
||||||
if (databaseForm->datlocprovider != 0)
|
if (databaseForm->datlocprovider != 0)
|
||||||
{
|
{
|
||||||
appendStringInfo(&str, " LOCALE_PROVIDER = '%c'", databaseForm->datlocprovider);
|
appendStringInfo(&str, " LOCALE_PROVIDER = '%s'", get_locale_provider_string(databaseForm->datlocprovider));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (collInfo.collversion != NULL)
|
if (collInfo.collversion != NULL)
|
||||||
|
|
|
@ -1490,7 +1490,7 @@ DDLTaskList(Oid relationId, const char *commandString)
|
||||||
List *
|
List *
|
||||||
NontransactionalNodeDDLTask(TargetWorkerSet targets, List *commands)
|
NontransactionalNodeDDLTask(TargetWorkerSet targets, List *commands)
|
||||||
{
|
{
|
||||||
List *ddlJobs = NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
|
List *ddlJobs = NodeDDLTaskList(targets, commands);
|
||||||
DDLJob *ddlJob = NULL;
|
DDLJob *ddlJob = NULL;
|
||||||
foreach_ptr(ddlJob, ddlJobs)
|
foreach_ptr(ddlJob, ddlJobs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,89 +19,143 @@ CREATE DATABASE mydatabase
|
||||||
TABLESPACE = create_drop_db_tablespace
|
TABLESPACE = create_drop_db_tablespace
|
||||||
ALLOW_CONNECTIONS = true
|
ALLOW_CONNECTIONS = true
|
||||||
IS_TEMPLATE = false;
|
IS_TEMPLATE = false;
|
||||||
SELECT pd.datname, pd.encoding,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
$$
|
||||||
pd.datcollate , pd. datctype , pd.datacl,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
FROM pg_database pd
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
WHERE datname = 'mydatabase';
|
FROM pg_database pd
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | tablespace
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
mydatabase | 6 | f | t | 10 | C | C | | create_drop_db_test_user | create_drop_db_tablespace
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
(1 row)
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
|
||||||
SELECT pd.datname, pd.encoding,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
mydatabase | 6 | f | t | 10 | C | C | | create_drop_db_test_user | create_drop_db_test_user | create_drop_db_tablespace
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
SELECT pd.datname, pd.encoding,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
mydatabase | 6 | f | t | 10 | C | C | | create_drop_db_test_user | create_drop_db_test_user | create_drop_db_tablespace
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
\c - - - :master_port
|
|
||||||
set citus.enable_create_database_propagation=on;
|
|
||||||
drop database mydatabase;
|
drop database mydatabase;
|
||||||
SELECT pd.datname, pd.encoding,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
$$
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
FROM pg_database pd
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
WHERE datname = 'mydatabase';
|
FROM pg_database pd
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | database_owner | tablespace
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(0 rows)
|
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
|
||||||
SELECT pd.datname, pd.encoding,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
(3 rows)
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
-- test database syncing after node addition
|
||||||
FROM pg_database pd
|
select citus_remove_node('localhost', :worker_2_port);
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
citus_remove_node
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(0 rows)
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
(1 row)
|
||||||
SELECT pd.datname, pd.encoding,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
--test with is_template true and allow connections false
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
CREATE DATABASE mydatabase
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
WITH TEMPLATE = 'template0'
|
||||||
FROM pg_database pd
|
OWNER = create_drop_db_test_user
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
CONNECTION LIMIT = 10
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
ENCODING = 'UTF8'
|
||||||
WHERE datname = 'mydatabase';
|
LC_COLLATE = 'C'
|
||||||
datname | encoding | datistemplate | datallowconn | datconnlimit | datcollate | datctype | datacl | database_owner | database_owner | tablespace
|
LC_CTYPE = 'C'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = false
|
||||||
|
IS_TEMPLATE = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(0 rows)
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
select citus_add_node('localhost', :worker_2_port);
|
||||||
|
citus_add_node
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
30
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
|
drop database mydatabase;
|
||||||
|
NOTICE: issuing DROP DATABASE mydatabase
|
||||||
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||||
|
NOTICE: issuing DROP DATABASE mydatabase
|
||||||
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
\c - - - :master_port
|
|
||||||
--tests for special characters in database name
|
--tests for special characters in database name
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.enable_create_database_propagation=on;
|
||||||
SET citus.log_remote_commands = true;
|
SET citus.log_remote_commands = true;
|
||||||
|
|
|
@ -1548,6 +1548,8 @@ CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
create user create_drop_db_test_user;
|
create user create_drop_db_test_user;
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.enable_create_database_propagation=on;
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
CREATE DATABASE mydatabase
|
CREATE DATABASE mydatabase
|
||||||
WITH TEMPLATE = 'template0'
|
WITH TEMPLATE = 'template0'
|
||||||
OWNER = create_drop_db_test_user
|
OWNER = create_drop_db_test_user
|
||||||
|
@ -1564,87 +1566,231 @@ CREATE DATABASE mydatabase
|
||||||
ALLOW_CONNECTIONS = true
|
ALLOW_CONNECTIONS = true
|
||||||
IS_TEMPLATE = false
|
IS_TEMPLATE = false
|
||||||
OID = 966345;
|
OID = 966345;
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
NOTICE: issuing CREATE DATABASE mydatabase TEMPLATE template0 OWNER create_drop_db_test_user CONNECTION LIMIT 10 ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE '' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' ICU_LOCALE 'und' LOCALE_PROVIDER 'icu' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS true IS_TEMPLATE false OID 966345
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
NOTICE: issuing CREATE DATABASE mydatabase TEMPLATE template0 OWNER create_drop_db_test_user CONNECTION LIMIT 10 ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE '' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' ICU_LOCALE 'und' LOCALE_PROVIDER 'icu' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS true IS_TEMPLATE false OID 966345
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
$$
|
||||||
FROM pg_database pd
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
WHERE datname = 'mydatabase';
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
mydatabase | 6 | i | f | t | 10 | C | C | und | 1.0 | | create_drop_db_test_user | create_drop_db_test_user | create_drop_db_tablespace
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
(1 row)
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
mydatabase | 6 | i | f | t | 10 | C | C | und | 1.0 | | create_drop_db_test_user | create_drop_db_test_user | create_drop_db_tablespace
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
mydatabase | 6 | i | f | t | 10 | C | C | und | 1.0 | | create_drop_db_test_user | create_drop_db_test_user | create_drop_db_tablespace
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
\c - - - :master_port
|
|
||||||
set citus.enable_create_database_propagation=on;
|
|
||||||
drop database mydatabase;
|
drop database mydatabase;
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
$$
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
FROM pg_database pd
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
WHERE datname = 'mydatabase';
|
FROM pg_database pd
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(0 rows)
|
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
(0 rows)
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
(3 rows)
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
select citus_remove_node('localhost', :worker_2_port);
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
citus_remove_node
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
datname | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datcollate | datctype | daticulocale | datcollversion | datacl | database_owner | database_owner | tablespace
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
(0 rows)
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
|
CREATE DATABASE mydatabase2
|
||||||
|
WITH OWNER = create_drop_db_test_user
|
||||||
|
ENCODING = 'UTF8'
|
||||||
|
STRATEGY = 'wal_log'
|
||||||
|
LOCALE = 'en_US.utf8'
|
||||||
|
LC_COLLATE = 'POSIX'
|
||||||
|
LC_CTYPE = 'POSIX'
|
||||||
|
COLLATION_VERSION = '1.0'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = true
|
||||||
|
IS_TEMPLATE = false
|
||||||
|
OID = 966345;
|
||||||
|
NOTICE: issuing CREATE DATABASE mydatabase2 OWNER create_drop_db_test_user ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE 'en_US.utf8' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS true IS_TEMPLATE false OID 966345
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase2'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
[{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
select citus_add_node('localhost', :worker_2_port);
|
||||||
|
NOTICE: issuing SET citus.enable_ddl_propagation TO 'off';select pg_catalog.citus_internal_database_command( 'CREATE DATABASE postgres OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE regression OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE template1 OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''true''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE template0 OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''false'' IS_TEMPLATE = ''true''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE mydatabase2 OWNER = create_drop_db_test_user ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' COLLATION_VERSION = ''1.0'' TABLESPACE = create_drop_db_tablespace ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');ALTER ROLE ALL IN DATABASE regression SET lc_messages = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_monetary = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_numeric = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_time = 'C';ALTER ROLE ALL IN DATABASE regression SET bytea_output = 'hex';ALTER ROLE ALL IN DATABASE regression SET timezone_abbreviations = 'Default';SET citus.enable_ddl_propagation TO 'on'
|
||||||
|
citus_add_node
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
30
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase2'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
[{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
|
drop database mydatabase2;
|
||||||
|
NOTICE: issuing DROP DATABASE mydatabase2
|
||||||
|
NOTICE: issuing DROP DATABASE mydatabase2
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
|
-- create a template database with all options set and allow connections false
|
||||||
|
CREATE DATABASE my_template_database
|
||||||
|
WITH TEMPLATE = 'template0'
|
||||||
|
OWNER = create_drop_db_test_user
|
||||||
|
ENCODING = 'UTF8'
|
||||||
|
STRATEGY = 'wal_log'
|
||||||
|
LOCALE = 'en_US.utf8'
|
||||||
|
LC_COLLATE = 'POSIX'
|
||||||
|
LC_CTYPE = 'POSIX'
|
||||||
|
ICU_LOCALE = 'en-US'
|
||||||
|
LOCALE_PROVIDER = 'icu'
|
||||||
|
COLLATION_VERSION = '1.0'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = false
|
||||||
|
IS_TEMPLATE = true;
|
||||||
|
NOTICE: issuing CREATE DATABASE my_template_database TEMPLATE template0 OWNER create_drop_db_test_user ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE 'en_US.utf8' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' ICU_LOCALE 'en-US' LOCALE_PROVIDER 'icu' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS false IS_TEMPLATE true
|
||||||
|
NOTICE: issuing CREATE DATABASE my_template_database TEMPLATE template0 OWNER create_drop_db_test_user ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE 'en_US.utf8' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' ICU_LOCALE 'en-US' LOCALE_PROVIDER 'icu' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS false IS_TEMPLATE true
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'my_template_database'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
[{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
[{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}]
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
--template databases could not be dropped so we need to change the template flag
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database'
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
UPDATE 1
|
||||||
|
UPDATE 1
|
||||||
|
UPDATE 1
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
;
|
||||||
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
|
drop database my_template_database;
|
||||||
|
NOTICE: issuing DROP DATABASE my_template_database
|
||||||
|
NOTICE: issuing DROP DATABASE my_template_database
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'my_template_database'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
drop tablespace create_drop_db_tablespace;
|
drop tablespace create_drop_db_tablespace;
|
||||||
|
@ -1653,4 +1799,4 @@ drop tablespace create_drop_db_tablespace;
|
||||||
\c - - - :worker_2_port
|
\c - - - :worker_2_port
|
||||||
drop tablespace create_drop_db_tablespace;
|
drop tablespace create_drop_db_tablespace;
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
drop user create_drop_db_test_user;
|
drop user create_drop_db_test_user;
|
||||||
|
|
|
@ -16,6 +16,60 @@ create user create_drop_db_test_user;
|
||||||
|
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.enable_create_database_propagation=on;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE DATABASE mydatabase
|
||||||
|
WITH OWNER = create_drop_db_test_user
|
||||||
|
TEMPLATE = 'template0'
|
||||||
|
ENCODING = 'UTF8'
|
||||||
|
CONNECTION LIMIT = 10
|
||||||
|
LC_COLLATE = 'C'
|
||||||
|
LC_CTYPE = 'C'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = true
|
||||||
|
IS_TEMPLATE = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
|
drop database mydatabase;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
-- test database syncing after node addition
|
||||||
|
|
||||||
|
select citus_remove_node('localhost', :worker_2_port);
|
||||||
|
|
||||||
|
--test with is_template true and allow connections false
|
||||||
CREATE DATABASE mydatabase
|
CREATE DATABASE mydatabase
|
||||||
WITH TEMPLATE = 'template0'
|
WITH TEMPLATE = 'template0'
|
||||||
OWNER = create_drop_db_test_user
|
OWNER = create_drop_db_test_user
|
||||||
|
@ -24,75 +78,62 @@ CREATE DATABASE mydatabase
|
||||||
LC_COLLATE = 'C'
|
LC_COLLATE = 'C'
|
||||||
LC_CTYPE = 'C'
|
LC_CTYPE = 'C'
|
||||||
TABLESPACE = create_drop_db_tablespace
|
TABLESPACE = create_drop_db_tablespace
|
||||||
ALLOW_CONNECTIONS = true
|
ALLOW_CONNECTIONS = false
|
||||||
IS_TEMPLATE = false;
|
IS_TEMPLATE = false;
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding,
|
select citus_add_node('localhost', :worker_2_port);
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
$$
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
FROM pg_database pd
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
WHERE datname = 'mydatabase';
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
\c - - - :master_port
|
SET citus.log_remote_commands = true;
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
drop database mydatabase;
|
drop database mydatabase;
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding,
|
SET citus.log_remote_commands = false;
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
SELECT pd.datname, pd.encoding,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
FROM pg_database pd
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
FROM pg_database pd
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
WHERE datname = 'mydatabase';
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
\c - - - :worker_2_port
|
) q2
|
||||||
|
$$
|
||||||
SELECT pd.datname, pd.encoding,
|
) ORDER BY result;
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.datacl, rolname AS database_owner,
|
|
||||||
pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
\c - - - :master_port
|
|
||||||
|
|
||||||
--tests for special characters in database name
|
--tests for special characters in database name
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.enable_create_database_propagation=on;
|
||||||
|
|
|
@ -995,6 +995,8 @@ CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
create user create_drop_db_test_user;
|
create user create_drop_db_test_user;
|
||||||
set citus.enable_create_database_propagation=on;
|
set citus.enable_create_database_propagation=on;
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
CREATE DATABASE mydatabase
|
CREATE DATABASE mydatabase
|
||||||
WITH TEMPLATE = 'template0'
|
WITH TEMPLATE = 'template0'
|
||||||
OWNER = create_drop_db_test_user
|
OWNER = create_drop_db_test_user
|
||||||
|
@ -1012,70 +1014,184 @@ CREATE DATABASE mydatabase
|
||||||
IS_TEMPLATE = false
|
IS_TEMPLATE = false
|
||||||
OID = 966345;
|
OID = 966345;
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
$$
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
FROM pg_database pd
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
WHERE datname = 'mydatabase';
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
\c - - - :worker_1_port
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
WHERE datname = 'mydatabase'
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
) q2
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
$$
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
) ORDER BY result;
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
|
|
||||||
\c - - - :master_port
|
|
||||||
set citus.enable_create_database_propagation=on;
|
|
||||||
drop database mydatabase;
|
drop database mydatabase;
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
SELECT result from run_command_on_all_nodes(
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
$$
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
FROM pg_database pd
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
WHERE datname = 'mydatabase';
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
select citus_remove_node('localhost', :worker_2_port);
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
|
||||||
FROM pg_database pd
|
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
|
||||||
WHERE datname = 'mydatabase';
|
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
|
||||||
|
|
||||||
SELECT pd.datname, pd.encoding, pd.datlocprovider,
|
SET citus.log_remote_commands = true;
|
||||||
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
pd.datcollate , pd. datctype , pd.daticulocale, pd.datcollversion,
|
|
||||||
pd.datacl, rolname AS database_owner, pa.rolname AS database_owner, pt.spcname AS tablespace
|
CREATE DATABASE mydatabase2
|
||||||
FROM pg_database pd
|
WITH OWNER = create_drop_db_test_user
|
||||||
JOIN pg_authid pa ON pd.datdba = pa.oid
|
ENCODING = 'UTF8'
|
||||||
join pg_tablespace pt on pd.dattablespace = pt.oid
|
STRATEGY = 'wal_log'
|
||||||
WHERE datname = 'mydatabase';
|
LOCALE = 'en_US.utf8'
|
||||||
|
LC_COLLATE = 'POSIX'
|
||||||
|
LC_CTYPE = 'POSIX'
|
||||||
|
COLLATION_VERSION = '1.0'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = true
|
||||||
|
IS_TEMPLATE = false
|
||||||
|
OID = 966345;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase2'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
select citus_add_node('localhost', :worker_2_port);
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase2'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
|
drop database mydatabase2;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'mydatabase'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
set citus.grep_remote_commands = '%CREATE DATABASE%';
|
||||||
|
|
||||||
|
-- create a template database with all options set and allow connections false
|
||||||
|
CREATE DATABASE my_template_database
|
||||||
|
WITH TEMPLATE = 'template0'
|
||||||
|
OWNER = create_drop_db_test_user
|
||||||
|
ENCODING = 'UTF8'
|
||||||
|
STRATEGY = 'wal_log'
|
||||||
|
LOCALE = 'en_US.utf8'
|
||||||
|
LC_COLLATE = 'POSIX'
|
||||||
|
LC_CTYPE = 'POSIX'
|
||||||
|
ICU_LOCALE = 'en-US'
|
||||||
|
LOCALE_PROVIDER = 'icu'
|
||||||
|
COLLATION_VERSION = '1.0'
|
||||||
|
TABLESPACE = create_drop_db_tablespace
|
||||||
|
ALLOW_CONNECTIONS = false
|
||||||
|
IS_TEMPLATE = true;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'my_template_database'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = true;
|
||||||
|
|
||||||
|
--template databases could not be dropped so we need to change the template flag
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database'
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
set citus.grep_remote_commands = '%DROP DATABASE%';
|
||||||
|
drop database my_template_database;
|
||||||
|
|
||||||
|
SET citus.log_remote_commands = false;
|
||||||
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
$$
|
||||||
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding,
|
||||||
|
pd.datistemplate, pd.datallowconn, pd.datconnlimit,
|
||||||
|
pd.datcollate , pd. datctype , pd.datacl,
|
||||||
|
pa.rolname AS database_owner, pt.spcname AS tablespace
|
||||||
|
FROM pg_database pd
|
||||||
|
JOIN pg_authid pa ON pd.datdba = pa.oid
|
||||||
|
join pg_tablespace pt on pd.dattablespace = pt.oid
|
||||||
|
WHERE datname = 'my_template_database'
|
||||||
|
) q2
|
||||||
|
$$
|
||||||
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
drop tablespace create_drop_db_tablespace;
|
drop tablespace create_drop_db_tablespace;
|
||||||
|
|
Loading…
Reference in New Issue