summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2012-07-11 15:42:58 +0000
committerMarko Kreen2012-07-13 19:44:28 +0000
commit6d588d82097532ade8040a2f2ecf3fcc286c931a (patch)
treee13ca6871f37e047a00c77c1b575f2de2e088fe4
parent65ab2946e8f1a52ac47ff830cd4e335af3df6daa (diff)
Convert DB modules to extensions
Keep installing old module files under contrib/ still.
-rwxr-xr-xdebian/genpg.sh11
-rw-r--r--debian/postgresql-9.1-pgq3.install15
-rw-r--r--debian/postgresql-9.2-pgq3.install15
-rw-r--r--sql/common-pgxs.mk73
-rw-r--r--sql/londiste/Makefile35
-rw-r--r--sql/londiste/expected/init_ext.out21
-rw-r--r--sql/londiste/expected/init_noext.out16
-rw-r--r--sql/londiste/expected/londiste_execute.out12
-rw-r--r--sql/londiste/londiste.control8
-rw-r--r--sql/londiste/sql/init_ext.sql22
-rw-r--r--sql/londiste/sql/init_noext.sql15
-rw-r--r--sql/londiste/structure/ext_postproc.sql9
-rw-r--r--sql/londiste/structure/ext_unpackaged.sql7
-rw-r--r--sql/pgq/Makefile45
-rw-r--r--sql/pgq/expected/logutriga.out5
-rw-r--r--sql/pgq/expected/pgq_init_ext.out49
-rw-r--r--sql/pgq/expected/pgq_init_noext.out (renamed from sql/pgq/expected/pgq_init.out)0
-rw-r--r--sql/pgq/pgq.control7
-rw-r--r--sql/pgq/sql/logutriga.sql5
-rw-r--r--sql/pgq/sql/pgq_init_ext.sql24
-rw-r--r--sql/pgq/sql/pgq_init_noext.sql (renamed from sql/pgq/sql/pgq_init.sql)0
-rw-r--r--sql/pgq/structure/ext_postproc.sql12
-rw-r--r--sql/pgq/structure/ext_unpackaged.sql12
-rw-r--r--sql/pgq/structure/upgrade.sql1
-rw-r--r--sql/pgq_coop/Makefile38
-rw-r--r--sql/pgq_coop/expected/pgq_coop_init_ext.out2
-rw-r--r--sql/pgq_coop/expected/pgq_coop_init_noext.out6
-rw-r--r--sql/pgq_coop/expected/pgq_coop_test.out6
-rw-r--r--sql/pgq_coop/pgq_coop.control7
-rw-r--r--sql/pgq_coop/sql/pgq_coop_init_ext.sql12
-rw-r--r--sql/pgq_coop/sql/pgq_coop_init_noext.sql7
-rw-r--r--sql/pgq_coop/sql/pgq_coop_test.sql6
-rw-r--r--sql/pgq_coop/structure/ext_unpackaged.sql3
-rw-r--r--sql/pgq_ext/Makefile32
-rw-r--r--sql/pgq_ext/expected/init_ext.out21
-rw-r--r--sql/pgq_ext/expected/init_noext.out6
-rw-r--r--sql/pgq_ext/expected/test_pgq_ext.out6
-rw-r--r--sql/pgq_ext/pgq_ext.control7
-rw-r--r--sql/pgq_ext/sql/init_ext.sql11
-rw-r--r--sql/pgq_ext/sql/init_noext.sql3
-rw-r--r--sql/pgq_ext/sql/test_pgq_ext.sql4
-rw-r--r--sql/pgq_ext/structure/ext_postproc.sql8
-rw-r--r--sql/pgq_ext/structure/ext_unpackaged.sql8
-rw-r--r--sql/pgq_node/Makefile36
-rw-r--r--sql/pgq_node/expected/pgq_node_init_ext.out22
-rw-r--r--sql/pgq_node/expected/pgq_node_init_noext.out11
-rw-r--r--sql/pgq_node/expected/pgq_node_test.out65
-rw-r--r--sql/pgq_node/pgq_node.control7
-rw-r--r--sql/pgq_node/sql/pgq_node_init_ext.sql13
-rw-r--r--sql/pgq_node/sql/pgq_node_init_noext.sql6
-rw-r--r--sql/pgq_node/sql/pgq_node_test.sql6
-rw-r--r--sql/pgq_node/structure/ext_postproc.sql9
-rw-r--r--sql/pgq_node/structure/ext_unpackaged.sql8
53 files changed, 625 insertions, 170 deletions
diff --git a/debian/genpg.sh b/debian/genpg.sh
index dab7866b..35514926 100755
--- a/debian/genpg.sh
+++ b/debian/genpg.sh
@@ -38,4 +38,15 @@ usr/share/postgresql/$v/contrib/oldgrants_pgq_node.sql
usr/share/postgresql/$v/contrib/oldgrants_pgq.sql
EOF
+if test "$v" = "9.1" -o "$v" = "9.2"; then
+ modver="3.1"
+ for mod in pgq pgq_node pgq_coop pgq_ext londiste; do
+ (
+ echo "usr/share/postgresql/$v/extension/${mod}.control"
+ echo "usr/share/postgresql/$v/extension/${mod}--${modver}.sql"
+ echo "usr/share/postgresql/$v/extension/${mod}--unpackaged--${modver}.sql"
+ ) >> "postgresql-$v-pgq3.install"
+ done
+fi
+
done
diff --git a/debian/postgresql-9.1-pgq3.install b/debian/postgresql-9.1-pgq3.install
index 6072e698..f9708aa5 100644
--- a/debian/postgresql-9.1-pgq3.install
+++ b/debian/postgresql-9.1-pgq3.install
@@ -22,3 +22,18 @@ usr/share/postgresql/9.1/contrib/oldgrants_pgq_coop.sql
usr/share/postgresql/9.1/contrib/oldgrants_pgq_ext.sql
usr/share/postgresql/9.1/contrib/oldgrants_pgq_node.sql
usr/share/postgresql/9.1/contrib/oldgrants_pgq.sql
+usr/share/postgresql/9.1/extension/pgq.control
+usr/share/postgresql/9.1/extension/pgq--3.1.sql
+usr/share/postgresql/9.1/extension/pgq--unpackaged--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_node.control
+usr/share/postgresql/9.1/extension/pgq_node--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_node--unpackaged--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_coop.control
+usr/share/postgresql/9.1/extension/pgq_coop--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_coop--unpackaged--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_ext.control
+usr/share/postgresql/9.1/extension/pgq_ext--3.1.sql
+usr/share/postgresql/9.1/extension/pgq_ext--unpackaged--3.1.sql
+usr/share/postgresql/9.1/extension/londiste.control
+usr/share/postgresql/9.1/extension/londiste--3.1.sql
+usr/share/postgresql/9.1/extension/londiste--unpackaged--3.1.sql
diff --git a/debian/postgresql-9.2-pgq3.install b/debian/postgresql-9.2-pgq3.install
index 31627a69..50bc2e38 100644
--- a/debian/postgresql-9.2-pgq3.install
+++ b/debian/postgresql-9.2-pgq3.install
@@ -22,3 +22,18 @@ usr/share/postgresql/9.2/contrib/oldgrants_pgq_coop.sql
usr/share/postgresql/9.2/contrib/oldgrants_pgq_ext.sql
usr/share/postgresql/9.2/contrib/oldgrants_pgq_node.sql
usr/share/postgresql/9.2/contrib/oldgrants_pgq.sql
+usr/share/postgresql/9.2/extension/pgq.control
+usr/share/postgresql/9.2/extension/pgq--3.1.sql
+usr/share/postgresql/9.2/extension/pgq--unpackaged--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_node.control
+usr/share/postgresql/9.2/extension/pgq_node--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_node--unpackaged--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_coop.control
+usr/share/postgresql/9.2/extension/pgq_coop--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_coop--unpackaged--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_ext.control
+usr/share/postgresql/9.2/extension/pgq_ext--3.1.sql
+usr/share/postgresql/9.2/extension/pgq_ext--unpackaged--3.1.sql
+usr/share/postgresql/9.2/extension/londiste.control
+usr/share/postgresql/9.2/extension/londiste--3.1.sql
+usr/share/postgresql/9.2/extension/londiste--unpackaged--3.1.sql
diff --git a/sql/common-pgxs.mk b/sql/common-pgxs.mk
new file mode 100644
index 00000000..22534504
--- /dev/null
+++ b/sql/common-pgxs.mk
@@ -0,0 +1,73 @@
+
+# PGXS does not support modules that are supposed
+# to run on different Postgres versions very well.
+# Here are some workarounds for them.
+
+# Variables that are used when extensions are available
+Extension_data ?=
+Extension_data_built ?=
+Extension_regress ?=
+
+# Variables that are used when extensions are not available
+Contrib_data ?=
+Contrib_data_built ?=
+Contrib_regress ?=
+
+# Should the Contrib* files installed (under ../contrib/)
+# even when extensions are available?
+Contrib_install_always ?= no
+
+#
+# switch variables
+#
+
+IfExt = $(if $(filter 8.% 9.0%,$(MAJORVERSION)8.3),$(2),$(1))
+
+DATA = $(call IfExt,$(Extension_data),$(Contrib_data))
+DATA_built = $(call IfExt,$(Extension_data_built),$(Contrib_data_built))
+REGRESS = $(call IfExt,$(Extension_regress),$(Contrib_regress))
+
+EXTRA_CLEAN += $(call IfExt,$(Contrib_data_built),$(Extension_data_built)) test.dump
+
+# have deterministic dbname for regtest database
+override CONTRIB_TESTDB = regression
+REGRESS_OPTS = --load-language=plpgsql --dbname=$(CONTRIB_TESTDB)
+
+#
+# load PGXS
+#
+
+PG_CONFIG ?= pg_config
+PGXS = $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+
+#
+# build rules, in case Contrib data must be always installed
+#
+
+ifeq ($(call IfExt,$(Contrib_install_always),no),yes)
+
+all: $(Contrib_data) $(Contrib_data_built)
+installdirs: installdirs-old-contrib
+install: install-old-contrib
+
+installdirs-old-contrib:
+ $(MKDIR_P) '$(DESTDIR)$(datadir)/contrib'
+
+install-old-contrib: $(Contrib_data) $(Contrib_data_built) installdirs-old-contrib
+ $(INSTALL_DATA) $(addprefix $(srcdir)/, $(Contrib_data)) $(Contrib_data_built) '$(DESTDIR)$(datadir)/contrib/'
+
+endif
+
+#
+# regtest shortcuts
+#
+
+test: install
+ $(MAKE) installcheck || { filterdiff --format=unified regression.diffs | less; exit 1; }
+ pg_dump regression > test.dump
+
+ack:
+ cp results/*.out expected/
+
+.PHONY: test ack installdirs-old-contrib install-old-contrib
diff --git a/sql/londiste/Makefile b/sql/londiste/Makefile
index d44c6193..31ff8b43 100644
--- a/sql/londiste/Makefile
+++ b/sql/londiste/Makefile
@@ -1,8 +1,21 @@
-DATA_built = londiste.sql londiste.upgrade.sql \
+EXTENSION = londiste
+
+Contrib_data_built = londiste.sql londiste.upgrade.sql \
structure/oldgrants_londiste.sql \
structure/newgrants_londiste.sql
+Extension_data_built = londiste--3.1.sql londiste--unpackaged--3.1.sql
+
+base_regress = londiste_provider londiste_subscriber \
+ londiste_fkeys londiste_execute londiste_seqs londiste_merge \
+ londiste_leaf londiste_create_part
+
+Contrib_regress = init_noext $(base_regress)
+Extension_regress = init_ext $(base_regress)
+
+Contrib_install_always = yes
+
SQLS = $(shell sed -e 's/^[^\\].*//' -e 's/\\i //' structure/install.sql)
FUNCS = $(shell sed -e 's/^[^\\].*//' -e 's/\\i //' $(SQLS))
SRCS = $(SQLS) $(FUNCS)
@@ -12,17 +25,13 @@ NDOCARGS = -r -o html docs/html -p docs -i docs/sql
CATSQL = ../../scripts/catsql.py
GRANTFU = ../../scripts/grantfu.py
-REGRESS = londiste_install londiste_provider londiste_subscriber \
- londiste_fkeys londiste_execute londiste_seqs londiste_merge \
- londiste_leaf londiste_create_part
-# londiste_denytrigger
+include ../common-pgxs.mk
-REGRESS_OPTS = --dbname=regression
-override CONTRIB_TESTDB=regression
+londiste--3.1.sql: londiste.sql structure/ext_postproc.sql
+ cat $^ > $@
-PG_CONFIG = pg_config
-PGXS = $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
+londiste--unpackaged--3.1.sql: londiste.upgrade.sql structure/ext_unpackaged.sql structure/ext_postproc.sql
+ cat $^ > $@
londiste.sql: $(SRCS)
$(CATSQL) $(SQLS) > $@
@@ -39,12 +48,6 @@ structure/oldgrants_londiste.sql: structure/grants.ini
cat structure/grants.sql >> $@
echo "commit;" >> $@
-test: londiste.sql
- $(MAKE) installcheck || { filterdiff --format=unified regression.diffs | less; exit 1; }
-
-ack:
- cp results/* expected/
-
dox: cleandox
mkdir -p docs/html
mkdir -p docs/sql
diff --git a/sql/londiste/expected/init_ext.out b/sql/londiste/expected/init_ext.out
new file mode 100644
index 00000000..db6ebeef
--- /dev/null
+++ b/sql/londiste/expected/init_ext.out
@@ -0,0 +1,21 @@
+\set ECHO off
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+create extension londiste from 'unpackaged';
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'londiste';
+ dumpable
+----------
+ 4
+(1 row)
+
+drop extension londiste;
+create extension londiste;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'londiste';
+ dumpable
+----------
+ 4
+(1 row)
+
diff --git a/sql/londiste/expected/init_noext.out b/sql/londiste/expected/init_noext.out
new file mode 100644
index 00000000..3cc747e5
--- /dev/null
+++ b/sql/londiste/expected/init_noext.out
@@ -0,0 +1,16 @@
+\set ECHO off
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
diff --git a/sql/londiste/expected/londiste_execute.out b/sql/londiste/expected/londiste_execute.out
index c1e9745f..fae6cbd1 100644
--- a/sql/londiste/expected/londiste_execute.out
+++ b/sql/londiste/expected/londiste_execute.out
@@ -6,9 +6,9 @@ select * from londiste.execute_start('branch_set', 'DDL-A.sql', 'drop all', fals
(1 row)
select * from londiste.execute_start('branch_set', 'DDL-A.sql', 'drop all', false);
- ret_code | ret_note
-----------+------------------------------------
- 301 | EXECUTE(DDL-A.sql) already applied
+ ret_code | ret_note
+----------+------------------------------------------------
+ 201 | EXECUTE: "DDL-A.sql" already applied, skipping
(1 row)
select * from londiste.execute_finish('branch_set', 'DDL-A.sql');
@@ -48,9 +48,9 @@ select * from londiste.execute_start('aset', 'DDL-root.sql', 'drop all', true);
(1 row)
select * from londiste.execute_start('aset', 'DDL-root.sql', 'drop all', true);
- ret_code | ret_note
-----------+---------------------------------------
- 301 | EXECUTE(DDL-root.sql) already applied
+ ret_code | ret_note
+----------+---------------------------------------------------
+ 201 | EXECUTE: "DDL-root.sql" already applied, skipping
(1 row)
select * from londiste.execute_finish('aset', 'DDL-root.sql');
diff --git a/sql/londiste/londiste.control b/sql/londiste/londiste.control
new file mode 100644
index 00000000..96c0e96f
--- /dev/null
+++ b/sql/londiste/londiste.control
@@ -0,0 +1,8 @@
+# Londiste extensions
+comment = 'Londiste Replication'
+default_version = '3.1'
+relocatable = false
+superuser = true
+schema = 'pg_catalog'
+requires = 'pgq_node'
+
diff --git a/sql/londiste/sql/init_ext.sql b/sql/londiste/sql/init_ext.sql
new file mode 100644
index 00000000..fdae9503
--- /dev/null
+++ b/sql/londiste/sql/init_ext.sql
@@ -0,0 +1,22 @@
+\set ECHO off
+
+set log_error_verbosity = 'terse';
+set client_min_messages = 'fatal';
+create language plpgsql;
+set client_min_messages = 'warning';
+
+create extension pgq;
+create extension pgq_node;
+
+\i londiste.sql
+
+\set ECHO all
+
+create extension londiste from 'unpackaged';
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'londiste';
+
+drop extension londiste;
+
+create extension londiste;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'londiste';
+
diff --git a/sql/londiste/sql/init_noext.sql b/sql/londiste/sql/init_noext.sql
new file mode 100644
index 00000000..c11550cf
--- /dev/null
+++ b/sql/londiste/sql/init_noext.sql
@@ -0,0 +1,15 @@
+\set ECHO off
+
+set log_error_verbosity = 'terse';
+set client_min_messages = 'fatal';
+create language plpgsql;
+set client_min_messages = 'warning';
+
+-- \i ../txid/txid.sql
+\i ../pgq/pgq.sql
+\i ../pgq_node/pgq_node.sql
+
+\i londiste.sql
+
+\set ECHO all
+
diff --git a/sql/londiste/structure/ext_postproc.sql b/sql/londiste/structure/ext_postproc.sql
new file mode 100644
index 00000000..34bd45cd
--- /dev/null
+++ b/sql/londiste/structure/ext_postproc.sql
@@ -0,0 +1,9 @@
+
+-- tag data objects as dumpable
+
+SELECT pg_catalog.pg_extension_config_dump('londiste.table_info', '');
+SELECT pg_catalog.pg_extension_config_dump('londiste.seq_info', '');
+SELECT pg_catalog.pg_extension_config_dump('londiste.applied_execute', '');
+SELECT pg_catalog.pg_extension_config_dump('londiste.pending_fkeys', '');
+
+
diff --git a/sql/londiste/structure/ext_unpackaged.sql b/sql/londiste/structure/ext_unpackaged.sql
new file mode 100644
index 00000000..71714e89
--- /dev/null
+++ b/sql/londiste/structure/ext_unpackaged.sql
@@ -0,0 +1,7 @@
+ALTER EXTENSION londiste ADD SCHEMA londiste;
+
+ALTER EXTENSION londiste ADD TABLE londiste.table_info;
+ALTER EXTENSION londiste ADD TABLE londiste.seq_info;
+ALTER EXTENSION londiste ADD TABLE londiste.applied_execute;
+ALTER EXTENSION londiste ADD TABLE londiste.pending_fkeys;
+
diff --git a/sql/pgq/Makefile b/sql/pgq/Makefile
index 487f92c9..1a21df42 100644
--- a/sql/pgq/Makefile
+++ b/sql/pgq/Makefile
@@ -1,7 +1,20 @@
+EXTENSION = pgq
+
DOCS = README.pgq
-DATA_built = pgq.sql pgq.upgrade.sql structure/oldgrants_pgq.sql structure/newgrants_pgq.sql
-DATA = structure/uninstall_pgq.sql
+
+Extension_data_built = pgq--3.1.sql pgq--unpackaged--3.1.sql
+
+Contrib_data_built = pgq.sql pgq.upgrade.sql structure/oldgrants_pgq.sql structure/newgrants_pgq.sql
+Contrib_data = structure/uninstall_pgq.sql
+
+Contrib_regress = pgq_init_noext pgq_core pgq_perms logutriga sqltriga $(trunc_test)
+Extension_regress = pgq_init_ext pgq_core pgq_perms logutriga sqltriga $(trunc_test)
+
+Contrib_install_always = yes
+
+# MAJORVERSION was defined in 8.4
+trunc_test = $(if $(MAJORVERSION),trunctrg)
# scripts that load other sql files
LDRS = structure/func_internal.sql structure/func_public.sql structure/triggers.sql
@@ -9,12 +22,7 @@ FUNCS = $(shell sed -e 's/^[^\\].*//' -e 's/\\i //' $(LDRS))
SRCS = structure/tables.sql structure/grants.sql structure/install.sql \
structure/uninstall_pgq.sql $(FUNCS)
-REGRESS = pgq_init pgq_core pgq_perms logutriga sqltriga trunctrg
-REGRESS_OPTS = --load-language=plpgsql
-
-PG_CONFIG = pg_config
-PGXS = $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
+include ../common-pgxs.mk
NDOC = NaturalDocs
NDOCARGS = -r -o html docs/html -p docs -i docs/sql
@@ -43,6 +51,12 @@ triggers/pgq_triggers.sql: sub-all
# combined SQL files
#
+pgq--3.1.sql: pgq.sql structure/ext_postproc.sql
+ cat $^ > $@
+
+pgq--unpackaged--3.1.sql: pgq.upgrade.sql structure/ext_unpackaged.sql structure/ext_postproc.sql
+ cat $^ > $@
+
pgq.sql: $(SRCS)
$(CATSQL) structure/install.sql > $@
@@ -76,17 +90,6 @@ cleandox:
clean: cleandox
-upload: dox
- rsync -az --delete docs/html/* data1:public_html/pgq-new/
-
-#
-# regtest shortcuts
-#
-
-test: pgq.sql
- $(MAKE) install installcheck || { filterdiff --format=unified regression.diffs | less; exit 1; }
-
-ack:
- cp results/*.out expected/
+test: $(Contrib_data_built)
-.PHONY: test ack upload cleandox dox
+.PHONY: cleandox dox
diff --git a/sql/pgq/expected/logutriga.out b/sql/pgq/expected/logutriga.out
index c0017c4d..21bc1bce 100644
--- a/sql/pgq/expected/logutriga.out
+++ b/sql/pgq/expected/logutriga.out
@@ -6,11 +6,10 @@ select 1 from (select set_config(name, 'escape', false) as ignore
----------
(0 rows)
-drop function pgq.insert_event(text, text, text, text, text, text, text);
-create or replace function pgq.insert_event(que text, ev_type text, ev_data text, x1 text, x2 text, x3 text, x4 text)
+create or replace function pgq.insert_event(queue_name text, ev_type text, ev_data text, ev_extra1 text, ev_extra2 text, ev_extra3 text, ev_extra4 text)
returns bigint as $$
begin
- raise notice 'insert_event(%, %, %, %)', que, ev_type, ev_data, x1;
+ raise notice 'insert_event(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
return 1;
end;
$$ language plpgsql;
diff --git a/sql/pgq/expected/pgq_init_ext.out b/sql/pgq/expected/pgq_init_ext.out
new file mode 100644
index 00000000..814ed056
--- /dev/null
+++ b/sql/pgq/expected/pgq_init_ext.out
@@ -0,0 +1,49 @@
+-- create noext schema
+\set ECHO none
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+ create_queue
+--------------
+ 1
+(1 row)
+
+-- convert to extension
+create extension pgq from 'unpackaged';
+select array_length(extconfig, 1) from pg_catalog.pg_extension where extname = 'pgq';
+ array_length
+--------------
+ 7
+(1 row)
+
+select pgq.create_queue('testqueue2');
+ create_queue
+--------------
+ 1
+(1 row)
+
+--drop extension pgq; -- will fail
+select pgq.drop_queue('testqueue2');
+ drop_queue
+------------
+ 1
+(1 row)
+
+select pgq.drop_queue('testqueue1');
+ drop_queue
+------------
+ 1
+(1 row)
+
+-- drop schema failure
+drop extension pgq;
+-- create clean schema
+create extension pgq;
+select array_length(extconfig, 1) from pg_catalog.pg_extension where extname = 'pgq';
+ array_length
+--------------
+ 7
+(1 row)
+
diff --git a/sql/pgq/expected/pgq_init.out b/sql/pgq/expected/pgq_init_noext.out
index 6460c411..6460c411 100644
--- a/sql/pgq/expected/pgq_init.out
+++ b/sql/pgq/expected/pgq_init_noext.out
diff --git a/sql/pgq/pgq.control b/sql/pgq/pgq.control
new file mode 100644
index 00000000..f02c27d5
--- /dev/null
+++ b/sql/pgq/pgq.control
@@ -0,0 +1,7 @@
+# pgq extension
+comment = 'Generic queue for PostgreSQL'
+default_version = '3.1'
+relocatable = false
+superuser = true
+schema = 'pg_catalog'
+
diff --git a/sql/pgq/sql/logutriga.sql b/sql/pgq/sql/logutriga.sql
index 5f8e7aa0..e97b2dce 100644
--- a/sql/pgq/sql/logutriga.sql
+++ b/sql/pgq/sql/logutriga.sql
@@ -4,11 +4,10 @@ select 1 from (select set_config(name, 'escape', false) as ignore
from pg_settings where name = 'bytea_output') x
where x.ignore = 'foo';
-drop function pgq.insert_event(text, text, text, text, text, text, text);
-create or replace function pgq.insert_event(que text, ev_type text, ev_data text, x1 text, x2 text, x3 text, x4 text)
+create or replace function pgq.insert_event(queue_name text, ev_type text, ev_data text, ev_extra1 text, ev_extra2 text, ev_extra3 text, ev_extra4 text)
returns bigint as $$
begin
- raise notice 'insert_event(%, %, %, %)', que, ev_type, ev_data, x1;
+ raise notice 'insert_event(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
return 1;
end;
$$ language plpgsql;
diff --git a/sql/pgq/sql/pgq_init_ext.sql b/sql/pgq/sql/pgq_init_ext.sql
new file mode 100644
index 00000000..3ed13776
--- /dev/null
+++ b/sql/pgq/sql/pgq_init_ext.sql
@@ -0,0 +1,24 @@
+
+-- create noext schema
+\set ECHO none
+\set VERBOSITY 'terse'
+\i structure/install.sql
+select pgq.create_queue('testqueue1');
+\set ECHO all
+-- convert to extension
+create extension pgq from 'unpackaged';
+select array_length(extconfig, 1) from pg_catalog.pg_extension where extname = 'pgq';
+
+select pgq.create_queue('testqueue2');
+--drop extension pgq; -- will fail
+select pgq.drop_queue('testqueue2');
+select pgq.drop_queue('testqueue1');
+
+-- drop schema failure
+drop extension pgq;
+
+-- create clean schema
+create extension pgq;
+
+select array_length(extconfig, 1) from pg_catalog.pg_extension where extname = 'pgq';
+
diff --git a/sql/pgq/sql/pgq_init.sql b/sql/pgq/sql/pgq_init_noext.sql
index d33cd9c7..d33cd9c7 100644
--- a/sql/pgq/sql/pgq_init.sql
+++ b/sql/pgq/sql/pgq_init_noext.sql
diff --git a/sql/pgq/structure/ext_postproc.sql b/sql/pgq/structure/ext_postproc.sql
new file mode 100644
index 00000000..dbe92b7d
--- /dev/null
+++ b/sql/pgq/structure/ext_postproc.sql
@@ -0,0 +1,12 @@
+
+-- tag data objects as dumpable
+
+SELECT pg_catalog.pg_extension_config_dump('pgq.queue', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq.consumer', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq.tick', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq.subscription', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq.event_template', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq.retry_queue', '');
+
+SELECT pg_catalog.pg_extension_config_dump('pgq.batch_id_seq', '');
+
diff --git a/sql/pgq/structure/ext_unpackaged.sql b/sql/pgq/structure/ext_unpackaged.sql
new file mode 100644
index 00000000..06971142
--- /dev/null
+++ b/sql/pgq/structure/ext_unpackaged.sql
@@ -0,0 +1,12 @@
+
+ALTER EXTENSION pgq ADD SCHEMA pgq;
+
+ALTER EXTENSION pgq ADD TABLE pgq.queue;
+ALTER EXTENSION pgq ADD TABLE pgq.consumer;
+ALTER EXTENSION pgq ADD TABLE pgq.tick;
+ALTER EXTENSION pgq ADD TABLE pgq.subscription;
+ALTER EXTENSION pgq ADD TABLE pgq.event_template;
+ALTER EXTENSION pgq ADD TABLE pgq.retry_queue;
+
+ALTER EXTENSION pgq ADD SEQUENCE pgq.batch_id_seq;
+
diff --git a/sql/pgq/structure/upgrade.sql b/sql/pgq/structure/upgrade.sql
index 1b898d11..94ae6c75 100644
--- a/sql/pgq/structure/upgrade.sql
+++ b/sql/pgq/structure/upgrade.sql
@@ -1,2 +1,3 @@
\i structure/func_internal.sql
\i structure/func_public.sql
+\i structure/triggers.sql
diff --git a/sql/pgq_coop/Makefile b/sql/pgq_coop/Makefile
index 5561ef71..6d88236d 100644
--- a/sql/pgq_coop/Makefile
+++ b/sql/pgq_coop/Makefile
@@ -1,19 +1,21 @@
-DATA_built = pgq_coop.sql pgq_coop.upgrade.sql \
+EXTENSION = pgq_coop
+
+Extension_data_built = pgq_coop--3.1.sql pgq_coop--unpackaged--3.1.sql
+Contrib_data_built = pgq_coop.sql pgq_coop.upgrade.sql \
structure/newgrants_pgq_coop.sql \
structure/oldgrants_pgq_coop.sql
-SQL_FULL = structure/schema.sql structure/functions.sql structure/grants.sql
+Contrib_regress = pgq_coop_init_noext pgq_coop_test
+Extension_regress = pgq_coop_init_ext pgq_coop_test
+Contrib_install_always = yes
+
+SQL_FULL = structure/schema.sql structure/functions.sql structure/grants.sql
FUNCS = $(shell sed -n -e '/^\\/{s/\\i //;p}' structure/functions.sql)
SRCS = $(SQL_FULL) $(FUNCS)
-REGRESS = pgq_coop_test
-REGRESS_OPTS = --load-language=plpgsql
-
-PG_CONFIG = pg_config
-PGXS = $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
+include ../common-pgxs.mk
NDOC = NaturalDocs
NDOCARGS = -r -o html docs/html -p docs -i docs/sql
@@ -25,6 +27,13 @@ GRANTFU = ../../scripts/grantfu.py
# combined SQL files
#
+pgq_coop--3.1.sql: pgq_coop.sql
+ cat $< > $@
+
+#pgq_coop--unpackaged--3.1.sql: structure/ext_unpackaged.sql pgq_coop.upgrade.sql
+pgq_coop--unpackaged--3.1.sql: pgq_coop.upgrade.sql structure/ext_unpackaged.sql
+ cat $< > $@
+
pgq_coop.sql: $(SRCS)
$(CATSQL) structure/install.sql > $@
@@ -54,16 +63,3 @@ cleandox:
clean: cleandox
-upload: dox
- rsync -az --delete docs/html/* data1:public_html/pgq-set/
-
-#
-# regtest shortcuts
-#
-
-test: pgq_coop.sql
- $(MAKE) installcheck || { less regression.diffs; exit 1; }
-
-ack:
- cp results/*.out expected/
-
diff --git a/sql/pgq_coop/expected/pgq_coop_init_ext.out b/sql/pgq_coop/expected/pgq_coop_init_ext.out
new file mode 100644
index 00000000..3fa4077f
--- /dev/null
+++ b/sql/pgq_coop/expected/pgq_coop_init_ext.out
@@ -0,0 +1,2 @@
+create extension pgq;
+create extension pgq_coop;
diff --git a/sql/pgq_coop/expected/pgq_coop_init_noext.out b/sql/pgq_coop/expected/pgq_coop_init_noext.out
new file mode 100644
index 00000000..6460c411
--- /dev/null
+++ b/sql/pgq_coop/expected/pgq_coop_init_noext.out
@@ -0,0 +1,6 @@
+\set ECHO none
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
diff --git a/sql/pgq_coop/expected/pgq_coop_test.out b/sql/pgq_coop/expected/pgq_coop_test.out
index f821d766..11e8424e 100644
--- a/sql/pgq_coop/expected/pgq_coop_test.out
+++ b/sql/pgq_coop/expected/pgq_coop_test.out
@@ -1,9 +1,3 @@
-\set ECHO none
- upgrade_schema
-----------------
- 0
-(1 row)
-
select pgq.create_queue('testqueue');
create_queue
--------------
diff --git a/sql/pgq_coop/pgq_coop.control b/sql/pgq_coop/pgq_coop.control
new file mode 100644
index 00000000..804e1f51
--- /dev/null
+++ b/sql/pgq_coop/pgq_coop.control
@@ -0,0 +1,7 @@
+# pgq_coop
+comment = 'Cooperative queue consuming for PgQ'
+default_version = '3.1'
+relocatable = false
+superuser = true
+schema = 'pg_catalog'
+requires = 'pgq'
diff --git a/sql/pgq_coop/sql/pgq_coop_init_ext.sql b/sql/pgq_coop/sql/pgq_coop_init_ext.sql
new file mode 100644
index 00000000..88f031d5
--- /dev/null
+++ b/sql/pgq_coop/sql/pgq_coop_init_ext.sql
@@ -0,0 +1,12 @@
+
+create extension pgq;
+
+\set ECHO none
+\i structure/install.sql
+\set ECHO all
+
+create extension pgq_coop from 'unpackaged';
+drop extension pgq_coop;
+
+create extension pgq_coop;
+
diff --git a/sql/pgq_coop/sql/pgq_coop_init_noext.sql b/sql/pgq_coop/sql/pgq_coop_init_noext.sql
new file mode 100644
index 00000000..e1e6e56e
--- /dev/null
+++ b/sql/pgq_coop/sql/pgq_coop_init_noext.sql
@@ -0,0 +1,7 @@
+
+\set ECHO none
+\i ../pgq/pgq.sql
+\i structure/schema.sql
+\i structure/functions.sql
+\set ECHO all
+
diff --git a/sql/pgq_coop/sql/pgq_coop_test.sql b/sql/pgq_coop/sql/pgq_coop_test.sql
index 93f583f1..0801a9d9 100644
--- a/sql/pgq_coop/sql/pgq_coop_test.sql
+++ b/sql/pgq_coop/sql/pgq_coop_test.sql
@@ -1,10 +1,4 @@
-\set ECHO none
-\i ../pgq/pgq.sql
-\i structure/schema.sql
-\i structure/functions.sql
-\set ECHO all
-
select pgq.create_queue('testqueue');
update pgq.queue set queue_ticker_max_count = 1 where queue_name = 'testqueue';
diff --git a/sql/pgq_coop/structure/ext_unpackaged.sql b/sql/pgq_coop/structure/ext_unpackaged.sql
new file mode 100644
index 00000000..2755d8a2
--- /dev/null
+++ b/sql/pgq_coop/structure/ext_unpackaged.sql
@@ -0,0 +1,3 @@
+
+ALTER EXTENSION pgq_coop ADD SCHEMA pgq_coop;
+
diff --git a/sql/pgq_ext/Makefile b/sql/pgq_ext/Makefile
index 8fec6e61..92ddbfbc 100644
--- a/sql/pgq_ext/Makefile
+++ b/sql/pgq_ext/Makefile
@@ -1,22 +1,32 @@
-DOCS = README.pgq_ext
-DATA_built = pgq_ext.sql pgq_ext.upgrade.sql \
+EXTENSION = pgq_ext
+
+Contrib_data_built = pgq_ext.sql pgq_ext.upgrade.sql \
structure/oldgrants_pgq_ext.sql \
structure/newgrants_pgq_ext.sql
+Contrib_regress = init_noext test_pgq_ext test_upgrade
-SRCS = $(wildcard functions/*.sql structure/*.sql)
+Extension_regress = init_ext test_pgq_ext
+Extension_data_built = pgq_ext--3.1.sql pgq_ext--unpackaged--3.1.sql
-REGRESS = test_pgq_ext test_upgrade
-REGRESS_OPTS = --load-language=plpgsql
+Contrib_install_always = yes
+
+DOCS = README.pgq_ext
+
+SRCS = $(wildcard functions/*.sql structure/*.sql)
GRANTFU = ../../scripts/grantfu.py
CATSQL = ../../scripts/catsql.py
NDOC = NaturalDocs
NDOCARGS = -r -o html docs/html -p docs -i docs/sql
-PG_CONFIG = pg_config
-PGXS = $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
+include ../common-pgxs.mk
+
+pgq_ext--3.1.sql: pgq_ext.sql structure/ext_postproc.sql
+ cat $^ > $@
+
+pgq_ext--unpackaged--3.1.sql: pgq_ext.upgrade.sql structure/ext_unpackaged.sql structure/ext_postproc.sql
+ cat $^ > $@
pgq_ext.sql: $(SRCS)
$(CATSQL) structure/install.sql > $@
@@ -33,12 +43,6 @@ structure/oldgrants_pgq_ext.sql: structure/grants.ini structure/grants.sql
cat structure/grants.sql >> $@
echo "commit;" >> $@
-test: pgq_ext.sql
- make installcheck || { less regression.diffs ; exit 1; }
-
-ack:
- cp results/* expected/
-
cleandox:
rm -rf docs/html docs/Data docs/sql
diff --git a/sql/pgq_ext/expected/init_ext.out b/sql/pgq_ext/expected/init_ext.out
new file mode 100644
index 00000000..921f10b0
--- /dev/null
+++ b/sql/pgq_ext/expected/init_ext.out
@@ -0,0 +1,21 @@
+\set ECHO off
+ upgrade_schema
+----------------
+ 4
+(1 row)
+
+create extension pgq_ext from 'unpackaged';
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_ext';
+ dumpable
+----------
+ 4
+(1 row)
+
+drop extension pgq_ext;
+create extension pgq_ext;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_ext';
+ dumpable
+----------
+ 4
+(1 row)
+
diff --git a/sql/pgq_ext/expected/init_noext.out b/sql/pgq_ext/expected/init_noext.out
new file mode 100644
index 00000000..48a00a35
--- /dev/null
+++ b/sql/pgq_ext/expected/init_noext.out
@@ -0,0 +1,6 @@
+\set ECHO off
+ upgrade_schema
+----------------
+ 4
+(1 row)
+
diff --git a/sql/pgq_ext/expected/test_pgq_ext.out b/sql/pgq_ext/expected/test_pgq_ext.out
index ad1ea437..668b8c87 100644
--- a/sql/pgq_ext/expected/test_pgq_ext.out
+++ b/sql/pgq_ext/expected/test_pgq_ext.out
@@ -1,9 +1,3 @@
-\set ECHO off
- upgrade_schema
-----------------
- 0
-(1 row)
-
--
-- test batch tracking
--
diff --git a/sql/pgq_ext/pgq_ext.control b/sql/pgq_ext/pgq_ext.control
new file mode 100644
index 00000000..9a224f2b
--- /dev/null
+++ b/sql/pgq_ext/pgq_ext.control
@@ -0,0 +1,7 @@
+# pgq_ext
+comment = 'Target-side batch tracking infrastructure'
+default_version = '3.1'
+relocatable = false
+superuser = true
+schema = 'pg_catalog'
+
diff --git a/sql/pgq_ext/sql/init_ext.sql b/sql/pgq_ext/sql/init_ext.sql
new file mode 100644
index 00000000..bea94d26
--- /dev/null
+++ b/sql/pgq_ext/sql/init_ext.sql
@@ -0,0 +1,11 @@
+
+\set ECHO off
+\i structure/install.sql
+\set ECHO all
+create extension pgq_ext from 'unpackaged';
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_ext';
+drop extension pgq_ext;
+
+create extension pgq_ext;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_ext';
+
diff --git a/sql/pgq_ext/sql/init_noext.sql b/sql/pgq_ext/sql/init_noext.sql
new file mode 100644
index 00000000..23803bd3
--- /dev/null
+++ b/sql/pgq_ext/sql/init_noext.sql
@@ -0,0 +1,3 @@
+\set ECHO off
+\i structure/install.sql
+
diff --git a/sql/pgq_ext/sql/test_pgq_ext.sql b/sql/pgq_ext/sql/test_pgq_ext.sql
index 9ceee599..2d94e041 100644
--- a/sql/pgq_ext/sql/test_pgq_ext.sql
+++ b/sql/pgq_ext/sql/test_pgq_ext.sql
@@ -1,7 +1,3 @@
-\set ECHO off
-\i structure/install.sql
-\set ECHO all
-
--
-- test batch tracking
--
diff --git a/sql/pgq_ext/structure/ext_postproc.sql b/sql/pgq_ext/structure/ext_postproc.sql
new file mode 100644
index 00000000..ce254032
--- /dev/null
+++ b/sql/pgq_ext/structure/ext_postproc.sql
@@ -0,0 +1,8 @@
+
+-- tag data objects as dumpable
+
+SELECT pg_catalog.pg_extension_config_dump('pgq_ext.completed_tick', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_ext.completed_batch', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_ext.completed_event', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_ext.partial_batch', '');
+
diff --git a/sql/pgq_ext/structure/ext_unpackaged.sql b/sql/pgq_ext/structure/ext_unpackaged.sql
new file mode 100644
index 00000000..51fbeb42
--- /dev/null
+++ b/sql/pgq_ext/structure/ext_unpackaged.sql
@@ -0,0 +1,8 @@
+
+ALTER EXTENSION pgq_ext ADD SCHEMA pgq_ext;
+
+ALTER EXTENSION pgq_ext ADD TABLE pgq_ext.completed_tick;
+ALTER EXTENSION pgq_ext ADD TABLE pgq_ext.completed_batch;
+ALTER EXTENSION pgq_ext ADD TABLE pgq_ext.completed_event;
+ALTER EXTENSION pgq_ext ADD TABLE pgq_ext.partial_batch;
+
diff --git a/sql/pgq_node/Makefile b/sql/pgq_node/Makefile
index c735587a..a42a7fad 100644
--- a/sql/pgq_node/Makefile
+++ b/sql/pgq_node/Makefile
@@ -1,19 +1,22 @@
-DATA_built = pgq_node.sql pgq_node.upgrade.sql \
+EXTENSION = pgq_node
+
+Extension_data_built = pgq_node--3.1.sql pgq_node--unpackaged--3.1.sql
+Contrib_data_built = pgq_node.sql pgq_node.upgrade.sql \
structure/newgrants_pgq_node.sql \
structure/oldgrants_pgq_node.sql
+Extension_regress = pgq_node_init_ext pgq_node_test
+Contrib_regress = pgq_node_init_noext pgq_node_test
+
+Contrib_install_always = yes
+
LDRS = structure/functions.sql
FUNCS = $(shell sed -e 's/^[^\\].*//' -e 's/\\i //' $(LDRS))
SRCS = structure/tables.sql structure/functions.sql structure/grants.sql \
$(FUNCS)
-REGRESS = pgq_node_test
-REGRESS_OPTS = --load-language=plpgsql
-
-PG_CONFIG = pg_config
-PGXS = $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
+include ../common-pgxs.mk
NDOC = NaturalDocs
NDOCARGS = -r -o html docs/html -p docs -i docs/sql
@@ -24,6 +27,12 @@ GRANTFU = ../../scripts/grantfu.py
# combined SQL files
#
+pgq_node--3.1.sql: pgq_node.sql structure/ext_postproc.sql
+ cat $^ > $@
+
+pgq_node--unpackaged--3.1.sql: pgq_node.upgrade.sql structure/ext_unpackaged.sql structure/ext_postproc.sql
+ cat $^ > $@
+
pgq_node.sql: $(SRCS)
$(CATSQL) structure/install.sql > $@
@@ -55,16 +64,3 @@ cleandox:
clean: cleandox
-upload: dox
- rsync -az --delete docs/html/* data1:public_html/pgq-set/
-
-#
-# regtest shortcuts
-#
-
-test: pgq_node.sql
- $(MAKE) installcheck || { filterdiff --format=unified regression.diffs | less; exit 1; }
-
-ack:
- cp results/*.out expected/
-
diff --git a/sql/pgq_node/expected/pgq_node_init_ext.out b/sql/pgq_node/expected/pgq_node_init_ext.out
new file mode 100644
index 00000000..778c35d2
--- /dev/null
+++ b/sql/pgq_node/expected/pgq_node_init_ext.out
@@ -0,0 +1,22 @@
+create extension pgq;
+\set ECHO none
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+create extension pgq_node from unpackaged;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_node';
+ dumpable
+----------
+ 4
+(1 row)
+
+drop extension pgq_node;
+create extension pgq_node;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_node';
+ dumpable
+----------
+ 4
+(1 row)
+
diff --git a/sql/pgq_node/expected/pgq_node_init_noext.out b/sql/pgq_node/expected/pgq_node_init_noext.out
new file mode 100644
index 00000000..65817072
--- /dev/null
+++ b/sql/pgq_node/expected/pgq_node_init_noext.out
@@ -0,0 +1,11 @@
+\set ECHO none
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
+ upgrade_schema
+----------------
+ 0
+(1 row)
+
diff --git a/sql/pgq_node/expected/pgq_node_test.out b/sql/pgq_node/expected/pgq_node_test.out
index 71e9e068..a19549db 100644
--- a/sql/pgq_node/expected/pgq_node_test.out
+++ b/sql/pgq_node/expected/pgq_node_test.out
@@ -1,14 +1,3 @@
-\set ECHO none
- upgrade_schema
-----------------
- 0
-(1 row)
-
- upgrade_schema
-----------------
- 0
-(1 row)
-
select * from pgq_node.register_location('aqueue', 'node1', 'dbname=node1', false);
ret_code | ret_note
----------+---------------------
@@ -427,57 +416,57 @@ select * from pgq_node.get_worker_state('mqueue');
(1 row)
select * from pgq_node.drop_node('asd', 'asd');
- ret_code | ret_note
-----------+--------------------
- 304 | No such queue: asd
+ ret_code | ret_note
+----------+-------------------
+ 200 | Node dropped: asd
(1 row)
select * from pgq_node.drop_node('mqueue', 'node3');
- ret_code | ret_note
-----------+--------------
- 200 | Node dropped
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node3
(1 row)
select * from pgq_node.drop_node('mqueue', 'node2');
- ret_code | ret_note
-----------+--------------
- 200 | Node dropped
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node2
(1 row)
select * from pgq_node.drop_node('mqueue', 'node1');
- ret_code | ret_note
-----------+-----------------------
- 304 | No such queue: mqueue
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node1
(1 row)
select * from pgq_node.drop_node('aqueue', 'node5');
- ret_code | ret_note
-----------+--------------
- 200 | Node dropped
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node5
(1 row)
select * from pgq_node.drop_node('aqueue', 'node4');
- ret_code | ret_note
-----------+--------------
- 200 | Node dropped
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node4
(1 row)
select * from pgq_node.drop_node('aqueue', 'node1');
- ret_code | ret_note
-----------+--------------
- 200 | Node dropped
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node1
(1 row)
select * from pgq_node.drop_node('aqueue', 'node2');
- ret_code | ret_note
-----------+-----------------------
- 304 | No such queue: aqueue
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node2
(1 row)
select * from pgq_node.drop_node('aqueue', 'node3');
- ret_code | ret_note
-----------+-----------------------
- 304 | No such queue: aqueue
+ ret_code | ret_note
+----------+---------------------
+ 200 | Node dropped: node3
(1 row)
\q
diff --git a/sql/pgq_node/pgq_node.control b/sql/pgq_node/pgq_node.control
new file mode 100644
index 00000000..a214cee6
--- /dev/null
+++ b/sql/pgq_node/pgq_node.control
@@ -0,0 +1,7 @@
+# pgq_node
+comment = 'Cascaded queue infrastructure'
+default_version = '3.1'
+relocatable = false
+superuser = true
+schema = 'pg_catalog'
+requires = 'pgq'
diff --git a/sql/pgq_node/sql/pgq_node_init_ext.sql b/sql/pgq_node/sql/pgq_node_init_ext.sql
new file mode 100644
index 00000000..9bc55793
--- /dev/null
+++ b/sql/pgq_node/sql/pgq_node_init_ext.sql
@@ -0,0 +1,13 @@
+
+create extension pgq;
+
+\set ECHO none
+\i structure/install.sql
+\set ECHO all
+create extension pgq_node from unpackaged;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_node';
+drop extension pgq_node;
+
+create extension pgq_node;
+select array_length(extconfig, 1) as dumpable from pg_catalog.pg_extension where extname = 'pgq_node';
+
diff --git a/sql/pgq_node/sql/pgq_node_init_noext.sql b/sql/pgq_node/sql/pgq_node_init_noext.sql
new file mode 100644
index 00000000..12c0109e
--- /dev/null
+++ b/sql/pgq_node/sql/pgq_node_init_noext.sql
@@ -0,0 +1,6 @@
+
+\set ECHO none
+\i ../pgq/pgq.sql
+\i structure/tables.sql
+\i structure/functions.sql
+
diff --git a/sql/pgq_node/sql/pgq_node_test.sql b/sql/pgq_node/sql/pgq_node_test.sql
index 1b2e1b92..2a312a26 100644
--- a/sql/pgq_node/sql/pgq_node_test.sql
+++ b/sql/pgq_node/sql/pgq_node_test.sql
@@ -1,10 +1,4 @@
-\set ECHO none
-\i ../pgq/pgq.sql
-\i structure/tables.sql
-\i structure/functions.sql
-\set ECHO all
-
select * from pgq_node.register_location('aqueue', 'node1', 'dbname=node1', false);
select * from pgq_node.register_location('aqueue', 'node2', 'dbname=node2', false);
select * from pgq_node.register_location('aqueue', 'node3', 'dbname=node3', false);
diff --git a/sql/pgq_node/structure/ext_postproc.sql b/sql/pgq_node/structure/ext_postproc.sql
new file mode 100644
index 00000000..2e3b2e39
--- /dev/null
+++ b/sql/pgq_node/structure/ext_postproc.sql
@@ -0,0 +1,9 @@
+
+-- tag data objects as dumpable
+
+SELECT pg_catalog.pg_extension_config_dump('pgq_node.node_location', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_node.node_info', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_node.local_state', '');
+SELECT pg_catalog.pg_extension_config_dump('pgq_node.subscriber_info', '');
+
+
diff --git a/sql/pgq_node/structure/ext_unpackaged.sql b/sql/pgq_node/structure/ext_unpackaged.sql
new file mode 100644
index 00000000..524e75ad
--- /dev/null
+++ b/sql/pgq_node/structure/ext_unpackaged.sql
@@ -0,0 +1,8 @@
+
+ALTER EXTENSION pgq_node ADD SCHEMA pgq_node;
+
+ALTER EXTENSION pgq_node ADD TABLE pgq_node.node_location;
+ALTER EXTENSION pgq_node ADD TABLE pgq_node.node_info;
+ALTER EXTENSION pgq_node ADD TABLE pgq_node.local_state;
+ALTER EXTENSION pgq_node ADD TABLE pgq_node.subscriber_info;
+