extsql/bdr--0.9.0.2--0.9.0.3.sql \
extsql/bdr--0.9.0.3--0.9.0.4.sql \
extsql/bdr--0.9.0.4--0.10.0.0.sql \
- extsql/bdr--0.10.0.0--0.10.0.1.sql
+ extsql/bdr--0.10.0.0--0.10.0.1.sql \
+ extsql/bdr--0.10.0.1--0.10.0.2.sql
DATA_built = \
extsql/bdr--0.8.0.1.sql \
extsql/bdr--0.9.0.3.sql \
extsql/bdr--0.9.0.4.sql \
extsql/bdr--0.10.0.0.sql \
- extsql/bdr--0.10.0.1.sql
+ extsql/bdr--0.10.0.1.sql \
+ extsql/bdr--0.10.0.2.sql
DOCS = bdr.conf.sample README.bdr
SCRIPTS = scripts/bdr_initial_load bdr_init_copy bdr_resetxlog bdr_dump
mkdir -p extsql
cat $^ > $@
+extsql/bdr--0.10.0.2.sql: extsql/bdr--0.10.0.1.sql extsql/bdr--0.10.0.1--0.10.0.2.sql
+ mkdir -p extsql
+ cat $^ > $@
+
bdr_resetxlog: pg_resetxlog.o
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X)
ifeq "@BUILDING_BDR@" "1"
check: regresscheck isolationcheck
-DDLREGRESSCHECKS=ddl/enable_ddl ddl/create ddl/alter_table ddl/extension ddl/function \
- ddl/grant ddl/mixed ddl/namespace ddl/replication_set \
+BDRREGRESSCHECKS=ddl/enable_ddl ddl/create ddl/alter_table ddl/extension ddl/function \
+ ddl/grant ddl/mixed ddl/namespace \
ddl/sequence ddl/view ddl/disable_ddl
REGRESSINIT=init_bdr
REGRESSTEARDOWN=part_bdr
else
check: regresscheck
-DDLREGRESSCHECKS=
+BDRREGRESSCHECKS=
REGRESSINIT=init_udr
REGRESSTEARDOWN=part_udr
endif
supervisordb \
upgrade \
identifier \
- $(DDLREGRESSCHECKS) \
+ $(BDRREGRESSCHECKS) \
+ ddl/replication_set \
dml/basic dml/contrib dml/delete_pk dml/extended dml/missing_pk dml/toasted \
$(REGRESSTEARDOWN)
# bdr extension
comment = 'Bi-directional replication for PostgreSQL'
-default_version = '0.10.0.1'
+default_version = '0.10.0.2'
module_pathname = '$libdir/bdr'
relocatable = false
requires = btree_gist
/* First test whether a table's replication set can be properly manipulated */
\c postgres
-CREATE SCHEMA normalschema;
-CREATE SCHEMA "strange.schema-IS";
-CREATE TABLE switcheroo(id serial primary key, data text);
-CREATE TABLE normalschema.sometbl_normalschema();
-CREATE TABLE "strange.schema-IS".sometbl_strangeschema();
+SHOW search_path;
+ search_path
+----------------
+ "$user",public
+(1 row)
+
+SET search_path = 'public';
+SELECT bdr.bdr_replicate_ddl_command('CREATE SCHEMA normalschema;');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('CREATE SCHEMA "strange.schema-IS";');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.switcheroo(id serial primary key, data text);');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE normalschema.sometbl_normalschema();');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE "strange.schema-IS".sometbl_strangeschema();');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
-- show initial replication sets
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
---------------
{default,all}
(2 rows)
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
---------------
{default,all}
\c postgres
-- empty replication set (just 'all')
-SELECT bdr.table_set_replication_sets('switcheroo', '{}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{}');
table_set_replication_sets
----------------------------
(1 row)
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
-------
{all}
(1 row)
-- configure a couple
-SELECT bdr.table_set_replication_sets('switcheroo', '{fascinating, is-it-not}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{fascinating, is-it-not}');
table_set_replication_sets
----------------------------
(1 row)
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
-----------------------------
{fascinating,is-it-not,all}
(2 rows)
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
-----------------------------
{fascinating,is-it-not,all}
\c postgres
-- make sure we can reset replication sets to the default again
-- configure a couple
-SELECT bdr.table_set_replication_sets('switcheroo', NULL);
+SELECT bdr.table_set_replication_sets('public.switcheroo', NULL);
table_set_replication_sets
----------------------------
(1 row)
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
---------------
{default,all}
(2 rows)
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
sets
---------------
{default,all}
\c postgres
-- make sure reserved names can't be set
-SELECT bdr.table_set_replication_sets('switcheroo', '{default,blubber}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{default,blubber}');
ERROR: replication set name "default" is reserved
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : ["default","blubber"] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
-SELECT bdr.table_set_replication_sets('switcheroo', '{blubber,default}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{blubber,default}');
ERROR: replication set name "default" is reserved
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : ["blubber","default"] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
-SELECT bdr.table_set_replication_sets('switcheroo', '{frakbar,all}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{frakbar,all}');
ERROR: replication set name "all" is reserved
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : ["frakbar","all"] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
--invalid characters
-SELECT bdr.table_set_replication_sets('switcheroo', '{///}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{///}');
ERROR: replication set name "///" contains invalid character
HINT: Replication set names may only contain letters, numbers, and the underscore character.
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : ["///"] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
--too short/long
-SELECT bdr.table_set_replication_sets('switcheroo', '{""}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{""}');
ERROR: replication set name "" is too short
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : [""] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
-SELECT bdr.table_set_replication_sets('switcheroo', '{12345678901234567890123456789012345678901234567890123456789012345678901234567890}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{12345678901234567890123456789012345678901234567890123456789012345678901234567890}');
ERROR: replication set name "12345678901234567890123456789012345678901234567890123456789012345678901234567890" is too long
CONTEXT: SQL statement "SECURITY LABEL FOR bdr ON TABLE switcheroo IS '{ "sets" : ["12345678901234567890123456789012345678901234567890123456789012345678901234567890"] }'"
PL/pgSQL function bdr.table_set_replication_sets(regclass,text[]) line 30 at EXECUTE statement
\c postgres
-DROP TABLE switcheroo;
-DROP TABLE normalschema.sometbl_normalschema;
-DROP TABLE "strange.schema-IS".sometbl_strangeschema;
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE public.switcheroo;');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE normalschema.sometbl_normalschema;');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE "strange.schema-IS".sometbl_strangeschema;');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location(), pid) FROM pg_stat_replication;
pg_xlog_wait_remote_apply
---------------------------
* node2: dbname postgres, sets: default, important, for-node-2
*/
\c postgres
-CREATE TABLE settest_1(data text primary key);
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.settest_1(data text primary key);');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
INSERT INTO settest_1(data) VALUES ('should-replicate-via-default');
SELECT bdr.table_set_replication_sets('settest_1', '{}');
table_set_replication_sets
(4 rows)
\c postgres
-DROP TABLE settest_1;
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE public.settest_1;');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
/*
* Now test configurations where only some actions are replicated.
*/
-CREATE TABLE settest_2(data text primary key);
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.settest_2(data text primary key);');
+ bdr_replicate_ddl_command
+---------------------------
+
+(1 row)
+
-- Test 1: ensure that inserts are replicated while update/delete are filtered
SELECT bdr.table_set_replication_sets('settest_2', '{for-node-2-insert}');
table_set_replication_sets
DROP EXTENSION bdr;
CREATE EXTENSION bdr VERSION '0.10.0.1';
DROP EXTENSION bdr;
+CREATE EXTENSION bdr VERSION '0.10.0.2';
+DROP EXTENSION bdr;
-- evolve version one by one from the oldest to the newest one
CREATE EXTENSION bdr VERSION '0.8.0';
ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
ALTER EXTENSION bdr UPDATE TO '0.9.0.4';
ALTER EXTENSION bdr UPDATE TO '0.10.0.0';
ALTER EXTENSION bdr UPDATE TO '0.10.0.1';
+ALTER EXTENSION bdr UPDATE TO '0.10.0.2';
-- Should never have to do anything: You missed adding the new version above.
ALTER EXTENSION bdr UPDATE;
-NOTICE: version "0.10.0.1" of extension "bdr" is already installed
+NOTICE: version "0.10.0.2" of extension "bdr" is already installed
\dx bdr
List of installed extensions
Name | Version | Schema | Description
------+----------+------------+-------------------------------------------
- bdr | 0.10.0.1 | pg_catalog | Bi-directional replication for PostgreSQL
+ bdr | 0.10.0.2 | pg_catalog | Bi-directional replication for PostgreSQL
(1 row)
\c postgres
--- /dev/null
+SET LOCAL search_path = bdr;
+SET bdr.permit_unsafe_ddl_commands = true;
+SET bdr.skip_ddl_replication = true;
+
+--
+-- set_replication_sets knows what it's doing and needs to be able to
+-- replicate SECURITY LABEL commands
+--
+ALTER FUNCTION bdr.table_set_replication_sets(p_relation regclass, p_sets text[])
+SET bdr.permit_unsafe_ddl_commands = true;
+
+
+RESET bdr.permit_unsafe_ddl_commands;
+RESET bdr.skip_ddl_replication;
+RESET search_path;
/* First test whether a table's replication set can be properly manipulated */
\c postgres
-CREATE SCHEMA normalschema;
-CREATE SCHEMA "strange.schema-IS";
-CREATE TABLE switcheroo(id serial primary key, data text);
-CREATE TABLE normalschema.sometbl_normalschema();
-CREATE TABLE "strange.schema-IS".sometbl_strangeschema();
+
+SHOW search_path;
+
+SET search_path = 'public';
+
+SELECT bdr.bdr_replicate_ddl_command('CREATE SCHEMA normalschema;');
+SELECT bdr.bdr_replicate_ddl_command('CREATE SCHEMA "strange.schema-IS";');
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.switcheroo(id serial primary key, data text);');
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE normalschema.sometbl_normalschema();');
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE "strange.schema-IS".sometbl_strangeschema();');
-- show initial replication sets
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location(), pid) FROM pg_stat_replication;
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
\c postgres
-- empty replication set (just 'all')
-SELECT bdr.table_set_replication_sets('switcheroo', '{}');
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{}');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
SELECT * FROM bdr.table_get_replication_sets('normalschema.sometbl_normalschema');
SELECT * FROM bdr.table_get_replication_sets('"strange.schema-IS".sometbl_strangeschema');
-- configure a couple
-SELECT bdr.table_set_replication_sets('switcheroo', '{fascinating, is-it-not}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{fascinating, is-it-not}');
SELECT * FROM bdr.table_set_replication_sets('normalschema.sometbl_normalschema', '{a}');
SELECT * FROM bdr.table_set_replication_sets('"strange.schema-IS".sometbl_strangeschema', '{a}');
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
SELECT * FROM bdr.table_get_replication_sets('normalschema.sometbl_normalschema');
SELECT * FROM bdr.table_get_replication_sets('"strange.schema-IS".sometbl_strangeschema');
SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location(), pid) FROM pg_stat_replication;
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
SELECT * FROM bdr.table_get_replication_sets('normalschema.sometbl_normalschema');
SELECT * FROM bdr.table_get_replication_sets('"strange.schema-IS".sometbl_strangeschema');
\c postgres
-- make sure we can reset replication sets to the default again
-- configure a couple
-SELECT bdr.table_set_replication_sets('switcheroo', NULL);
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT bdr.table_set_replication_sets('public.switcheroo', NULL);
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location(), pid) FROM pg_stat_replication;
\c regression
-SELECT * FROM bdr.table_get_replication_sets('switcheroo');
+SELECT * FROM bdr.table_get_replication_sets('public.switcheroo');
\c postgres
-- make sure reserved names can't be set
-SELECT bdr.table_set_replication_sets('switcheroo', '{default,blubber}');
-SELECT bdr.table_set_replication_sets('switcheroo', '{blubber,default}');
-SELECT bdr.table_set_replication_sets('switcheroo', '{frakbar,all}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{default,blubber}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{blubber,default}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{frakbar,all}');
--invalid characters
-SELECT bdr.table_set_replication_sets('switcheroo', '{///}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{///}');
--too short/long
-SELECT bdr.table_set_replication_sets('switcheroo', '{""}');
-SELECT bdr.table_set_replication_sets('switcheroo', '{12345678901234567890123456789012345678901234567890123456789012345678901234567890}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{""}');
+SELECT bdr.table_set_replication_sets('public.switcheroo', '{12345678901234567890123456789012345678901234567890123456789012345678901234567890}');
\c postgres
-DROP TABLE switcheroo;
-DROP TABLE normalschema.sometbl_normalschema;
-DROP TABLE "strange.schema-IS".sometbl_strangeschema;
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE public.switcheroo;');
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE normalschema.sometbl_normalschema;');
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE "strange.schema-IS".sometbl_strangeschema;');
SELECT pg_xlog_wait_remote_apply(pg_current_xlog_location(), pid) FROM pg_stat_replication;
*/
\c postgres
-CREATE TABLE settest_1(data text primary key);
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.settest_1(data text primary key);');
INSERT INTO settest_1(data) VALUES ('should-replicate-via-default');
\c regression
SELECT * FROM settest_1 ORDER BY data;
\c postgres
-DROP TABLE settest_1;
+SELECT bdr.bdr_replicate_ddl_command('DROP TABLE public.settest_1;');
/*
* Now test configurations where only some actions are replicated.
*/
-CREATE TABLE settest_2(data text primary key);
+SELECT bdr.bdr_replicate_ddl_command('CREATE TABLE public.settest_2(data text primary key);');
-- Test 1: ensure that inserts are replicated while update/delete are filtered
SELECT bdr.table_set_replication_sets('settest_2', '{for-node-2-insert}');
CREATE EXTENSION bdr VERSION '0.10.0.1';
DROP EXTENSION bdr;
+CREATE EXTENSION bdr VERSION '0.10.0.2';
+DROP EXTENSION bdr;
+
-- evolve version one by one from the oldest to the newest one
CREATE EXTENSION bdr VERSION '0.8.0';
ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
ALTER EXTENSION bdr UPDATE TO '0.9.0.4';
ALTER EXTENSION bdr UPDATE TO '0.10.0.0';
ALTER EXTENSION bdr UPDATE TO '0.10.0.1';
+ALTER EXTENSION bdr UPDATE TO '0.10.0.2';
-- Should never have to do anything: You missed adding the new version above.