summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTarvi Pillessaar2012-12-31 08:00:25 +0000
committerTarvi Pillessaar2012-12-31 08:00:25 +0000
commit37ac1314a3fbf1f87069a2fc20cd12d41bd1466b (patch)
treeaaa888082ec6f015e054fc4addc7e191221eb870
parent9a623e11cde1c865f65b7d3685e7ccbccb07a648 (diff)
parent7c1badd99e24d71bc8f91998b454345af28e86f5 (diff)
Merge remote-tracking branch 'remotes/marko-github/master'
-rw-r--r--.gitignore7
-rw-r--r--NEWS6
-rw-r--r--configure.ac2
-rw-r--r--debian/changelog6
-rw-r--r--debian/copyright4
-rwxr-xr-xdebian/genpg.sh14
-rw-r--r--debian/postgresql-9.1-pgq3.install12
-rw-r--r--debian/postgresql-9.2-pgq3.install12
-rw-r--r--doc/pgqd.txt2
-rw-r--r--doc/qadmin.txt2
-rwxr-xr-xmisc/bumpver.py22
-rwxr-xr-xmisc/bumpver.sh14
-rwxr-xr-xmisc/checkver.sh27
-rw-r--r--python/skytools/__init__.py3
-rw-r--r--python/skytools/hashtext.py10
-rw-r--r--sql/londiste/Makefile4
-rw-r--r--sql/londiste/expected/init_noext_1.out2
-rw-r--r--sql/londiste/expected/londiste_fkeys.out4
-rw-r--r--sql/londiste/expected/londiste_provider.out2
-rw-r--r--sql/londiste/expected/londiste_provider_1.out47
-rw-r--r--sql/londiste/functions/londiste.version.sql2
-rw-r--r--sql/londiste/londiste.control2
-rw-r--r--sql/londiste/sql/londiste_fkeys.sql1
-rw-r--r--sql/londiste/sql/londiste_provider.sql2
-rw-r--r--sql/pgq/expected/logutriga.out45
-rw-r--r--sql/pgq/expected/pgq_core.out1
-rw-r--r--sql/pgq/expected/sqltriga.out60
-rw-r--r--sql/pgq/expected/trunctrg.out7
-rw-r--r--sql/pgq/pgq.control2
-rw-r--r--sql/pgq/sql/logutriga.sql3
-rw-r--r--sql/pgq/sql/pgq_core.sql1
-rw-r--r--sql/pgq/sql/pgq_init_ext.sql1
-rw-r--r--sql/pgq/sql/pgq_init_noext.sql2
-rw-r--r--sql/pgq/sql/pgq_init_upgrade.sql1
-rw-r--r--sql/pgq/sql/sqltriga.sql1
-rw-r--r--sql/pgq/sql/trunctrg.sql1
-rw-r--r--sql/pgq/triggers/common.c4
-rw-r--r--sql/pgq/triggers/qbuilder.h2
-rw-r--r--sql/pgq_ext/functions/pgq_ext.version.sql2
-rw-r--r--sql/pgq_node/Makefile4
-rw-r--r--sql/pgq_node/functions/pgq_node.version.sql2
-rw-r--r--sql/pgq_node/pgq_node.control2
-rwxr-xr-xsql/ztestall.sh11
43 files changed, 223 insertions, 138 deletions
diff --git a/.gitignore b/.gitignore
index 04a7f9b9..02304a46 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,6 +44,7 @@ debian/postgresql-*-pgq3/*
debian/skytools3*/*
debian/skytools-pgq*/*
debian/skytools-londiste*/*
+debian/control-pgstamp
python/skytools/installer_config.py
sql/txid/txid.sql
@@ -63,6 +64,12 @@ sql/txid/txid.sql.in
tests/londiste/conf
tests/merge/conf
+sql/*/*--*--*.sql
+sql/*/*--*.sql
+sql/*/test.dump
+sql/*/structure/newgrants*.sql
+sql/*/structure/oldgrants*.sql
+
tmp_files.lst
sql/ticker/pgqd.ini.h
diff --git a/NEWS b/NEWS
index a54bd108..0fb04eca 100644
--- a/NEWS
+++ b/NEWS
@@ -1,9 +1,9 @@
-2012-11-xx - SkyTools 3.1.3 - ""
+2012-12-21 - SkyTools 3.1.3 - "Chainsaw-wielding Toothfairy"
= Features =
- * londiste resurrect
+ * londiste resurrect: Sync queue contents on old dead root.
* londiste node-status: Show info about local node.
* londiste takeover --dead-root: search for node with latest batches.
* londiste compare/repair: work with tables not available on immediate provider
@@ -17,6 +17,7 @@
* syncer: Clean up error messages.
* syncer: Add missing throttling.
* londiste handlers parameter validation.
+ * Pure-Python fallback for hashtext module.
= Fixes =
@@ -24,6 +25,7 @@
* londiste add-table throws error if table already exists but with different handler.
* syncer: throttle queries when waiting
* Fix exception_hook crash if curs.query is None
+ * Fix extension version mismatches which made them uninstallable.
2012-11-02 - SkyTools 3.1.2 - "Tank in a Tarball"
diff --git a/configure.ac b/configure.ac
index b6bdc817..2b0698d9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(skytools, 3.1.2)
+AC_INIT(skytools, 3.1.3)
AC_CONFIG_SRCDIR(python/londiste.py)
AC_CONFIG_HEADER(lib/usual/config.h)
AC_PREREQ([2.59])
diff --git a/debian/changelog b/debian/changelog
index 74aa8b65..460ef96b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+skytools3 (3.1.3) experimental; urgency=low
+
+ * v3.1.3
+
+ -- Marko Kreen <[email protected]> Fri, 21 Dec 2012 10:57:05 +0200
+
skytools3 (3.1.2) experimental; urgency=low
* v3.1.2
diff --git a/debian/copyright b/debian/copyright
index 70d1f966..76cbcf78 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -6,10 +6,6 @@ It was downloaded from:
https://github.com/markokr/skytools
-Upstream Author(s):
-
- Marko Kreen <[email protected]>
-
Copyright:
Copyright (C) 2007-2011 Marko Kreen, Skype Technologies OÜ
diff --git a/debian/genpg.sh b/debian/genpg.sh
index 3f538754..55e7e79d 100755
--- a/debian/genpg.sh
+++ b/debian/genpg.sh
@@ -2,6 +2,18 @@
# generate per-version files
+test -f debian/genpg.sh || {
+ echo "$0: Run it from top-level directory"
+ exit 1
+}
+
+./misc/checkver.sh || {
+ echo "$0: versions out of sync, stop"
+ exit 1
+}
+
+cd debian
+
for v in 8.3 8.4 9.0 9.1 9.2; do
echo "usr/share/doc/postgresql-$v" > "postgresql-$v-pgq3.dirs"
@@ -58,3 +70,5 @@ if test "$v" = "9.1" -o "$v" = "9.2"; then
fi
done
+
+exit 0
diff --git a/debian/postgresql-9.1-pgq3.install b/debian/postgresql-9.1-pgq3.install
index 71d1ca76..3b173232 100644
--- a/debian/postgresql-9.1-pgq3.install
+++ b/debian/postgresql-9.1-pgq3.install
@@ -29,8 +29,9 @@ usr/share/postgresql/9.1/extension/pgq--3.1--3.1.3.sql
usr/share/postgresql/9.1/extension/pgq--3.1.1--3.1.3.sql
usr/share/postgresql/9.1/extension/pgq--3.1.2--3.1.3.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_node--3.1.3.sql
+usr/share/postgresql/9.1/extension/pgq_node--unpackaged--3.1.3.sql
+usr/share/postgresql/9.1/extension/pgq_node--3.1--3.1.3.sql
usr/share/postgresql/9.1/extension/pgq_coop.control
usr/share/postgresql/9.1/extension/pgq_coop--3.1.1.sql
usr/share/postgresql/9.1/extension/pgq_coop--unpackaged--3.1.1.sql
@@ -39,6 +40,7 @@ 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.2.sql
-usr/share/postgresql/9.1/extension/londiste--unpackaged--3.1.2.sql
-usr/share/postgresql/9.1/extension/londiste--3.1.1--3.1.2.sql
+usr/share/postgresql/9.1/extension/londiste--3.1.3.sql
+usr/share/postgresql/9.1/extension/londiste--unpackaged--3.1.3.sql
+usr/share/postgresql/9.1/extension/londiste--3.1--3.1.3.sql
+usr/share/postgresql/9.1/extension/londiste--3.1.1--3.1.3.sql
diff --git a/debian/postgresql-9.2-pgq3.install b/debian/postgresql-9.2-pgq3.install
index dd6f0c6a..6e122a7d 100644
--- a/debian/postgresql-9.2-pgq3.install
+++ b/debian/postgresql-9.2-pgq3.install
@@ -29,8 +29,9 @@ usr/share/postgresql/9.2/extension/pgq--3.1--3.1.3.sql
usr/share/postgresql/9.2/extension/pgq--3.1.1--3.1.3.sql
usr/share/postgresql/9.2/extension/pgq--3.1.2--3.1.3.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_node--3.1.3.sql
+usr/share/postgresql/9.2/extension/pgq_node--unpackaged--3.1.3.sql
+usr/share/postgresql/9.2/extension/pgq_node--3.1--3.1.3.sql
usr/share/postgresql/9.2/extension/pgq_coop.control
usr/share/postgresql/9.2/extension/pgq_coop--3.1.1.sql
usr/share/postgresql/9.2/extension/pgq_coop--unpackaged--3.1.1.sql
@@ -39,6 +40,7 @@ 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.2.sql
-usr/share/postgresql/9.2/extension/londiste--unpackaged--3.1.2.sql
-usr/share/postgresql/9.2/extension/londiste--3.1.1--3.1.2.sql
+usr/share/postgresql/9.2/extension/londiste--3.1.3.sql
+usr/share/postgresql/9.2/extension/londiste--unpackaged--3.1.3.sql
+usr/share/postgresql/9.2/extension/londiste--3.1--3.1.3.sql
+usr/share/postgresql/9.2/extension/londiste--3.1.1--3.1.3.sql
diff --git a/doc/pgqd.txt b/doc/pgqd.txt
index 4edf3d3f..4c873dac 100644
--- a/doc/pgqd.txt
+++ b/doc/pgqd.txt
@@ -10,7 +10,7 @@ pgqd - PGQ ticker daemon
== DESCRIPTION ==
-The goal is to be psql-like console for queue administration.
+PgQ ticker and maintenance daemon. Works with several databases in parallel.
== GENERAL OPTIONS ==
diff --git a/doc/qadmin.txt b/doc/qadmin.txt
index f66e97d9..9ef46c3a 100644
--- a/doc/qadmin.txt
+++ b/doc/qadmin.txt
@@ -158,7 +158,7 @@ to.
with expect_sync::
Set table state to 'ok'.
- with tgflags='UIDBAQL'::
+ with tgflags='IUDBAQLS'::
Trigger creation flags, see below for details.
with backup::
diff --git a/misc/bumpver.py b/misc/bumpver.py
deleted file mode 100755
index d99553e0..00000000
--- a/misc/bumpver.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#! /usr/bin/env python
-
-import sys, re
-
-def inc(m):
- v = int(m.group(1))
- return str(v + 1) + "'"
-
-func = open(sys.argv[1], 'r').read()
-
-rc = re.compile(r"([0-9]+)'")
-nfunc = rc.sub(inc, func)
-
-rc2 = re.compile(r"'([0-9.]+)'")
-nver = rc2.search(nfunc).group(1)
-
-#print func
-#print nfunc
-print nver
-
-open(sys.argv[1], 'w').write(nfunc)
-
diff --git a/misc/bumpver.sh b/misc/bumpver.sh
deleted file mode 100755
index bf2b48f0..00000000
--- a/misc/bumpver.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /bin/sh
-
-for s in pgq pgq_node pgq_coop londiste pgq_ext; do
- sver=$(git log --raw -n 1 sql/$s/functions | head -1)
- fn="sql/$s/functions/$s.version.sql"
- fver=$(git log --raw -n 1 "$fn" | head -1)
- test "$sver" = "$fver" && continue
-
- echo "$s needs new version"
- #nver=`./misc/bumpver.py "$fn"`
- #git commit -m "$s.version(): $nver" "$fn"
-done
-
-grep 'return ' sql/*/functions/*.version.sql
diff --git a/misc/checkver.sh b/misc/checkver.sh
new file mode 100755
index 00000000..3868ac9f
--- /dev/null
+++ b/misc/checkver.sh
@@ -0,0 +1,27 @@
+#! /bin/sh
+
+err=0
+
+for s in pgq pgq_node pgq_coop londiste pgq_ext; do
+ code_hash=$(git log --raw -n 1 sql/$s/functions | head -1)
+ fn="sql/$s/functions/$s.version.sql"
+ ver_hash=$(git log --raw -n 1 "$fn" | head -1)
+ test "${code_hash}" = "${ver_hash}" || echo "$s has code changes, needs new version"
+
+ ver_func=$(sed -n "s/.*return *'\(.*\)';/\1/;T;p" $fn)
+ ver_control=$(sed -n "s/default_version = '\(.*\)'/\1/;T;p" sql/$s/$s.control)
+ ver_make=$(sed -n "s/EXT_VERSION = \(.*\)/\1/;T;p" sql/$s/Makefile)
+
+ if test "${ver_func}|${ver_control}" = "${ver_make}|${ver_make}"; then
+ echo "$s: $ver_control"
+ else
+ echo "$s: version mismatch"
+ echo " Makefile: $ver_make"
+ echo " version(): $ver_func"
+ echo " control: $ver_control"
+ err=1
+ fi
+done
+
+exit $err
+
diff --git a/python/skytools/__init__.py b/python/skytools/__init__.py
index 792ae29b..8f2c52a3 100644
--- a/python/skytools/__init__.py
+++ b/python/skytools/__init__.py
@@ -157,6 +157,7 @@ elif 1:
from skytools.dbstruct import *
from skytools.fileutil import *
from skytools.gzlog import *
+ from skytools.hashtext import *
from skytools.natsort import *
from skytools.parsing import *
from skytools.psycopgwrapper import *
@@ -178,6 +179,7 @@ else:
import skytools.dbstruct
import skytools.fileutil
import skytools.gzlog
+ import skytools.hashtext
import skytools.natsort
import skytools.parsing
import skytools.psycopgwrapper
@@ -195,6 +197,7 @@ else:
+ skytools.dbstruct.__all__
+ skytools.fileutil.__all__
+ skytools.gzlog.__all__
+ + skytools.hashtext.__all__
+ skytools.natsort.__all__
+ skytools.parsing.__all__
+ skytools.psycopgwrapper.__all__
diff --git a/python/skytools/hashtext.py b/python/skytools/hashtext.py
index d230ae59..3fb46394 100644
--- a/python/skytools/hashtext.py
+++ b/python/skytools/hashtext.py
@@ -1,5 +1,8 @@
"""
-Pure python implementation of Postgres hashes
+Implementation of Postgres hashing function.
+
+hashtext_old() - used up to PostgreSQL 8.3
+hashtext_new() - used since PostgreSQL 8.4
>>> import skytools._chashtext
>>> for i in range(3):
@@ -27,10 +30,7 @@ True
import sys, struct
-__all__ = [
- "hashtext_old_py", "hashtext_new_py",
- "hashtext_old", "hashtext_new"
-]
+__all__ = ["hashtext_old", "hashtext_new"]
# pad for last partial block
PADDING = '\0' * 12
diff --git a/sql/londiste/Makefile b/sql/londiste/Makefile
index e302b2ea..993d3318 100644
--- a/sql/londiste/Makefile
+++ b/sql/londiste/Makefile
@@ -1,8 +1,8 @@
EXTENSION = londiste
-EXT_VERSION = 3.1.2
-EXT_OLD_VERSIONS = 3.1.1
+EXT_VERSION = 3.1.3
+EXT_OLD_VERSIONS = 3.1 3.1.1
base_regress = londiste_provider londiste_subscriber \
londiste_fkeys londiste_execute londiste_seqs londiste_merge \
diff --git a/sql/londiste/expected/init_noext_1.out b/sql/londiste/expected/init_noext_1.out
index 9e17c8f8..3cc747e5 100644
--- a/sql/londiste/expected/init_noext_1.out
+++ b/sql/londiste/expected/init_noext_1.out
@@ -11,6 +11,6 @@
upgrade_schema
----------------
- 2
+ 0
(1 row)
diff --git a/sql/londiste/expected/londiste_fkeys.out b/sql/londiste/expected/londiste_fkeys.out
index f561be23..6aca809d 100644
--- a/sql/londiste/expected/londiste_fkeys.out
+++ b/sql/londiste/expected/londiste_fkeys.out
@@ -1,21 +1,19 @@
set log_error_verbosity = 'terse';
+set client_min_messages = 'warning';
create table ref_1 (
id int4 primary key,
val text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ref_1_pkey" for table "ref_1"
create table ref_2 (
id int4 primary key,
ref int4 not null references ref_1,
val text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ref_2_pkey" for table "ref_2"
create table ref_3 (
id int4 primary key,
ref2 int4 not null references ref_2,
val text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ref_3_pkey" for table "ref_3"
select * from londiste.global_add_table('branch_set', 'public.ref_1');
ret_code | ret_note
----------+---------------------------
diff --git a/sql/londiste/expected/londiste_provider.out b/sql/londiste/expected/londiste_provider.out
index 102ae837..7ee31983 100644
--- a/sql/londiste/expected/londiste_provider.out
+++ b/sql/londiste/expected/londiste_provider.out
@@ -168,7 +168,7 @@ select * from londiste.local_change_handler('aset', 'public.hdlr_test', array['e
(1 row)
insert into hdlr_test values (2, 'data2');
-select * from londiste.local_change_handler('aset', 'public.hdlr_test', array[]::text[], '');
+select * from londiste.local_change_handler('aset', 'public.hdlr_test', '{}'::text[], '');
ret_code | ret_note
----------+---------------------------------------------
200 | Handler changed for table: public.hdlr_test
diff --git a/sql/londiste/expected/londiste_provider_1.out b/sql/londiste/expected/londiste_provider_1.out
index 8be82d8a..74e7a433 100644
--- a/sql/londiste/expected/londiste_provider_1.out
+++ b/sql/londiste/expected/londiste_provider_1.out
@@ -112,6 +112,18 @@ select * from londiste.local_add_table('aset', 'public.trg_test', array['ev_extr
200 | Table added: public.trg_test
(1 row)
+select * from londiste.local_add_table('aset', 'public.trg_test');
+ ret_code | ret_note
+----------+--------------------------------------
+ 200 | Table already added: public.trg_test
+(1 row)
+
+select * from londiste.local_add_table('aset', 'public.trg_test', array['ev_extra4=''test='' || txt'], 'handler=foobar');
+ ret_code | ret_note
+----------+----------------------------------------------------------------
+ 410 | Table public.trg_test already added, but with different args:
+(1 row)
+
insert into trg_test values (1, 'data');
truncate trg_test;
select ev_id, ev_type, ev_data, ev_extra1, ev_extra4 from pgq.event_template where ev_extra1 = 'public.trg_test';
@@ -133,3 +145,38 @@ select tgname from pg_trigger where tgrelid = 'public.trg_test'::regclass order
_londiste_aset
(1 row)
+-- handler test
+create table hdlr_test (
+ id int4 primary key,
+ txt text
+);
+select * from londiste.local_add_table('aset', 'public.hdlr_test');
+ ret_code | ret_note
+----------+-------------------------------
+ 200 | Table added: public.hdlr_test
+(1 row)
+
+insert into hdlr_test values (1, 'data');
+select * from londiste.local_change_handler('aset', 'public.hdlr_test', array['ev_extra4=''test='' || txt'], 'handler=foobar');
+ ret_code | ret_note
+----------+---------------------------------------------
+ 200 | Handler changed for table: public.hdlr_test
+(1 row)
+
+insert into hdlr_test values (2, 'data2');
+select * from londiste.local_change_handler('aset', 'public.hdlr_test', '{}'::text[], '');
+ ret_code | ret_note
+----------+---------------------------------------------
+ 200 | Handler changed for table: public.hdlr_test
+(1 row)
+
+insert into hdlr_test values (3, 'data3');
+truncate hdlr_test;
+select ev_id, ev_type, ev_data, ev_extra1, ev_extra4 from pgq.event_template where ev_extra1 = 'public.hdlr_test';
+ ev_id | ev_type | ev_data | ev_extra1 | ev_extra4
+-------+---------+----------------+------------------+------------
+ 7 | I:id | id=1&txt=data | public.hdlr_test |
+ 8 | I:id | id=2&txt=data2 | public.hdlr_test | test=data2
+ 9 | I:id | id=3&txt=data3 | public.hdlr_test |
+(3 rows)
+
diff --git a/sql/londiste/functions/londiste.version.sql b/sql/londiste/functions/londiste.version.sql
index 1743dd70..06bd33bd 100644
--- a/sql/londiste/functions/londiste.version.sql
+++ b/sql/londiste/functions/londiste.version.sql
@@ -8,7 +8,7 @@ returns text as $$
-- and only bumped when database code changes.
-- ----------------------------------------------------------------------
begin
- return '3.1.2';
+ return '3.1.3';
end;
$$ language plpgsql;
diff --git a/sql/londiste/londiste.control b/sql/londiste/londiste.control
index 2dd908e2..13f2f38f 100644
--- a/sql/londiste/londiste.control
+++ b/sql/londiste/londiste.control
@@ -1,6 +1,6 @@
# Londiste extensions
comment = 'Londiste Replication'
-default_version = '3.1.1'
+default_version = '3.1.3'
relocatable = false
superuser = true
schema = 'pg_catalog'
diff --git a/sql/londiste/sql/londiste_fkeys.sql b/sql/londiste/sql/londiste_fkeys.sql
index 78616664..085d4194 100644
--- a/sql/londiste/sql/londiste_fkeys.sql
+++ b/sql/londiste/sql/londiste_fkeys.sql
@@ -1,5 +1,6 @@
set log_error_verbosity = 'terse';
+set client_min_messages = 'warning';
create table ref_1 (
id int4 primary key,
diff --git a/sql/londiste/sql/londiste_provider.sql b/sql/londiste/sql/londiste_provider.sql
index cac89c1a..cfd300ee 100644
--- a/sql/londiste/sql/londiste_provider.sql
+++ b/sql/londiste/sql/londiste_provider.sql
@@ -63,7 +63,7 @@ insert into hdlr_test values (1, 'data');
select * from londiste.local_change_handler('aset', 'public.hdlr_test', array['ev_extra4=''test='' || txt'], 'handler=foobar');
insert into hdlr_test values (2, 'data2');
-select * from londiste.local_change_handler('aset', 'public.hdlr_test', array[]::text[], '');
+select * from londiste.local_change_handler('aset', 'public.hdlr_test', '{}'::text[], '');
insert into hdlr_test values (3, 'data3');
truncate hdlr_test;
diff --git a/sql/pgq/expected/logutriga.out b/sql/pgq/expected/logutriga.out
index 21bc1bce..e0c431fb 100644
--- a/sql/pgq/expected/logutriga.out
+++ b/sql/pgq/expected/logutriga.out
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
select 1 from (select set_config(name, 'escape', false) as ignore
from pg_settings where name = 'bytea_output') x
where x.ignore = 'foo';
@@ -9,7 +10,7 @@ select 1 from (select set_config(name, 'escape', false) as ignore
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(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
+ raise warning 'insert_event(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
return 1;
end;
$$ language plpgsql;
@@ -18,34 +19,32 @@ create table udata (
txt text,
bin bytea
);
-NOTICE: CREATE TABLE will create implicit sequence "udata_id_seq" for serial column "udata.id"
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "udata_pkey" for table "udata"
create trigger utest AFTER insert or update or delete ON udata
for each row execute procedure pgq.logutriga('udata_que');
insert into udata (txt) values ('text1');
-NOTICE: insert_event(udata_que, I:id, id=1&txt=text1&bin, public.udata)
+WARNING: insert_event(udata_que, I:id, id=1&txt=text1&bin, public.udata)
insert into udata (bin) values (E'bi\tn\\000bin');
-NOTICE: insert_event(udata_que, I:id, id=2&txt&bin=bi%5c011n%5c000bin, public.udata)
+WARNING: insert_event(udata_que, I:id, id=2&txt&bin=bi%5c011n%5c000bin, public.udata)
-- test ignore
drop trigger utest on udata;
truncate udata;
create trigger utest after insert or update or delete on udata
for each row execute procedure pgq.logutriga('udata_que', 'ignore=bin');
insert into udata values (1, 'txt', 'bin');
-NOTICE: insert_event(udata_que, I:id, id=1&txt=txt, public.udata)
+WARNING: insert_event(udata_que, I:id, id=1&txt=txt, public.udata)
update udata set txt = 'txt';
-NOTICE: insert_event(udata_que, U:id, id=1&txt=txt, public.udata)
+WARNING: insert_event(udata_que, U:id, id=1&txt=txt, public.udata)
update udata set txt = 'txt2', bin = 'bin2';
-NOTICE: insert_event(udata_que, U:id, id=1&txt=txt2, public.udata)
+WARNING: insert_event(udata_que, U:id, id=1&txt=txt2, public.udata)
update udata set bin = 'bin3';
delete from udata;
-NOTICE: insert_event(udata_que, D:id, id=1&txt=txt2, public.udata)
+WARNING: insert_event(udata_que, D:id, id=1&txt=txt2, public.udata)
-- test missing pkey
create table nopkey2 (dat text);
create trigger nopkey_triga2 after insert or update or delete on nopkey2
for each row execute procedure pgq.logutriga('que3');
insert into nopkey2 values ('foo');
-NOTICE: insert_event(que3, I:, dat=foo, public.nopkey2)
+WARNING: insert_event(que3, I:, dat=foo, public.nopkey2)
update nopkey2 set dat = 'bat';
ERROR: Update/Delete on table without pkey
delete from nopkey2;
@@ -56,7 +55,7 @@ create trigger ucustom_triga after insert or update or delete on ucustom_pkey
--for each row execute procedure pgq.logutriga('que3', 'pkey=dat1,dat2');
for each row execute procedure pgq.logutriga('que3');
insert into ucustom_pkey values ('foo', '2');
-NOTICE: insert_event(que3, I:, dat1=foo&dat2=2&dat3, public.ucustom_pkey)
+WARNING: insert_event(que3, I:, dat1=foo&dat2=2&dat3, public.ucustom_pkey)
update ucustom_pkey set dat3 = 'bat';
ERROR: Update/Delete on table without pkey
delete from ucustom_pkey;
@@ -72,41 +71,38 @@ create table custom_fields2 (
_pgq_ev_extra3 text default 'e3',
_pgq_ev_extra4 text default 'e4'
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "custom_fields2_pkey" for table "custom_fields2"
create trigger customf2_triga after insert or update or delete on custom_fields2
for each row execute procedure pgq.logutriga('que3');
insert into custom_fields2 values ('foo', '2');
-NOTICE: insert_event(que3, my_type, dat1=foo&dat2=2&dat3, e1)
+WARNING: insert_event(que3, my_type, dat1=foo&dat2=2&dat3, e1)
update custom_fields2 set dat3 = 'bat';
-NOTICE: insert_event(que3, my_type, dat1=foo&dat2=2&dat3=bat, e1)
+WARNING: insert_event(que3, my_type, dat1=foo&dat2=2&dat3=bat, e1)
delete from custom_fields2;
-NOTICE: insert_event(que3, my_type, dat1=foo&dat2=2&dat3=bat, e1)
+WARNING: insert_event(que3, my_type, dat1=foo&dat2=2&dat3=bat, e1)
-- test custom expression
create table custom_expr2 (
dat1 text not null primary key,
dat2 int2 not null,
dat3 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "custom_expr2_pkey" for table "custom_expr2"
create trigger customex2_triga after insert or update or delete on custom_expr2
for each row execute procedure pgq.logutriga('que3', 'ev_extra1=''test='' || dat1', 'ev_type=dat3');
insert into custom_expr2 values ('foo', '2');
-NOTICE: insert_event(que3, <NULL>, dat1=foo&dat2=2&dat3, test=foo)
+WARNING: insert_event(que3, <NULL>, dat1=foo&dat2=2&dat3, test=foo)
update custom_expr2 set dat3 = 'bat';
-NOTICE: insert_event(que3, bat, dat1=foo&dat2=2&dat3=bat, test=foo)
+WARNING: insert_event(que3, bat, dat1=foo&dat2=2&dat3=bat, test=foo)
delete from custom_expr2;
-NOTICE: insert_event(que3, bat, dat1=foo&dat2=2&dat3=bat, test=foo)
+WARNING: insert_event(que3, bat, dat1=foo&dat2=2&dat3=bat, test=foo)
-- test when=
create table when_test (
dat1 text not null primary key,
dat2 int2 not null,
dat3 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "when_test_pkey" for table "when_test"
create trigger when_triga after insert or update or delete on when_test
for each row execute procedure pgq.logutriga('que3', 'when=dat1=''foo''');
insert into when_test values ('foo', '2');
-NOTICE: insert_event(que3, I:dat1, dat1=foo&dat2=2&dat3, public.when_test)
+WARNING: insert_event(que3, I:dat1, dat1=foo&dat2=2&dat3, public.when_test)
insert into when_test values ('bar', '2');
select * from when_test;
dat1 | dat2 | dat3
@@ -116,9 +112,9 @@ select * from when_test;
(2 rows)
update when_test set dat3 = 'bat';
-NOTICE: insert_event(que3, U:dat1, dat1=foo&dat2=2&dat3=bat, public.when_test)
+WARNING: insert_event(que3, U:dat1, dat1=foo&dat2=2&dat3=bat, public.when_test)
delete from when_test;
-NOTICE: insert_event(que3, D:dat1, dat1=foo&dat2=2&dat3=bat, public.when_test)
+WARNING: insert_event(que3, D:dat1, dat1=foo&dat2=2&dat3=bat, public.when_test)
drop trigger when_triga on when_test;
create trigger when_triga after insert or update or delete on when_test
for each row execute procedure pgq.logutriga('que3', 'when=current_user=''random''');
@@ -134,13 +130,12 @@ create table deny_test (
dat1 text not null primary key,
dat2 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "deny_test_pkey" for table "deny_test"
create trigger deny_triga after insert or update or delete on deny_test
for each row execute procedure pgq.logutriga('noqueue', 'deny');
insert into deny_test values ('1', '2');
ERROR: Table 'public.deny_test' to queue 'noqueue': change not allowed (I)
-- test pk update
insert into udata (id, txt) values (1, 'txt');
-NOTICE: insert_event(udata_que, I:id, id=1&txt=txt, public.udata)
+WARNING: insert_event(udata_que, I:id, id=1&txt=txt, public.udata)
update udata set id = 2;
ERROR: primary key update not allowed
diff --git a/sql/pgq/expected/pgq_core.out b/sql/pgq/expected/pgq_core.out
index 265ccc41..a68a799b 100644
--- a/sql/pgq/expected/pgq_core.out
+++ b/sql/pgq/expected/pgq_core.out
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
select * from pgq.maint_tables_to_vacuum();
maint_tables_to_vacuum
------------------------
diff --git a/sql/pgq/expected/sqltriga.out b/sql/pgq/expected/sqltriga.out
index 139de081..913e418d 100644
--- a/sql/pgq/expected/sqltriga.out
+++ b/sql/pgq/expected/sqltriga.out
@@ -1,39 +1,39 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
-- start testing
create table rtest (
id integer primary key,
dat text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "rtest_pkey" for table "rtest"
create trigger rtest_triga after insert or update or delete on rtest
for each row execute procedure pgq.sqltriga('que');
-- simple test
insert into rtest values (1, 'value1');
-NOTICE: insert_event(que, I, (id,dat) values ('1','value1'), public.rtest)
+WARNING: insert_event(que, I, (id,dat) values ('1','value1'), public.rtest)
update rtest set dat = 'value2';
-NOTICE: insert_event(que, U, dat='value2' where id='1', public.rtest)
+WARNING: insert_event(que, U, dat='value2' where id='1', public.rtest)
delete from rtest;
-NOTICE: insert_event(que, D, id='1', public.rtest)
+WARNING: insert_event(que, D, id='1', public.rtest)
-- test new fields
alter table rtest add column dat2 text;
insert into rtest values (1, 'value1');
-NOTICE: insert_event(que, I, (id,dat,dat2) values ('1','value1',null), public.rtest)
+WARNING: insert_event(que, I, (id,dat,dat2) values ('1','value1',null), public.rtest)
update rtest set dat = 'value2';
-NOTICE: insert_event(que, U, dat='value2' where id='1', public.rtest)
+WARNING: insert_event(que, U, dat='value2' where id='1', public.rtest)
delete from rtest;
-NOTICE: insert_event(que, D, id='1', public.rtest)
+WARNING: insert_event(que, D, id='1', public.rtest)
-- test field ignore
drop trigger rtest_triga on rtest;
create trigger rtest_triga after insert or update or delete on rtest
for each row execute procedure pgq.sqltriga('que2', 'ignore=dat2');
insert into rtest values (1, '666', 'newdat');
-NOTICE: insert_event(que2, I, (id,dat) values ('1','666'), public.rtest)
+WARNING: insert_event(que2, I, (id,dat) values ('1','666'), public.rtest)
update rtest set dat = 5, dat2 = 'newdat2';
-NOTICE: insert_event(que2, U, dat='5' where id='1', public.rtest)
+WARNING: insert_event(que2, U, dat='5' where id='1', public.rtest)
update rtest set dat = 6;
-NOTICE: insert_event(que2, U, dat='6' where id='1', public.rtest)
+WARNING: insert_event(que2, U, dat='6' where id='1', public.rtest)
delete from rtest;
-NOTICE: insert_event(que2, D, id='1', public.rtest)
+WARNING: insert_event(que2, D, id='1', public.rtest)
-- test hashed pkey
-- drop trigger rtest_triga on rtest;
-- create trigger rtest_triga after insert or update or delete on rtest
@@ -47,25 +47,25 @@ drop trigger rtest_triga on rtest;
create trigger rtest_triga after insert or update or delete on rtest
for each row execute procedure pgq.sqltriga('que3');
insert into rtest values (1, 0, 'non-null');
-NOTICE: insert_event(que3, I, (id,dat,dat2) values ('1','0','non-null'), public.rtest)
+WARNING: insert_event(que3, I, (id,dat,dat2) values ('1','0','non-null'), public.rtest)
insert into rtest values (2, 0, NULL);
-NOTICE: insert_event(que3, I, (id,dat,dat2) values ('2','0',null), public.rtest)
+WARNING: insert_event(que3, I, (id,dat,dat2) values ('2','0',null), public.rtest)
update rtest set dat2 = 'non-null2' where id=1;
-NOTICE: insert_event(que3, U, dat2='non-null2' where id='1', public.rtest)
+WARNING: insert_event(que3, U, dat2='non-null2' where id='1', public.rtest)
update rtest set dat2 = NULL where id=1;
-NOTICE: insert_event(que3, U, dat2=NULL where id='1', public.rtest)
+WARNING: insert_event(que3, U, dat2=NULL where id='1', public.rtest)
update rtest set dat2 = 'new-nonnull' where id=2;
-NOTICE: insert_event(que3, U, dat2='new-nonnull' where id='2', public.rtest)
+WARNING: insert_event(que3, U, dat2='new-nonnull' where id='2', public.rtest)
delete from rtest where id=1;
-NOTICE: insert_event(que3, D, id='1', public.rtest)
+WARNING: insert_event(que3, D, id='1', public.rtest)
delete from rtest where id=2;
-NOTICE: insert_event(que3, D, id='2', public.rtest)
+WARNING: insert_event(que3, D, id='2', public.rtest)
-- test missing pkey
create table nopkey (dat text);
create trigger nopkey_triga after insert or update or delete on nopkey
for each row execute procedure pgq.sqltriga('que3');
insert into nopkey values ('foo');
-NOTICE: insert_event(que3, I, (dat) values ('foo'), public.nopkey)
+WARNING: insert_event(que3, I, (dat) values ('foo'), public.nopkey)
update nopkey set dat = 'bat';
ERROR: Update/Delete on table without pkey
delete from nopkey;
@@ -75,11 +75,11 @@ create table custom_pkey (dat1 text not null, dat2 int2 not null, dat3 text);
create trigger custom_triga after insert or update or delete on custom_pkey
for each row execute procedure pgq.sqltriga('que3', 'pkey=dat1,dat2');
insert into custom_pkey values ('foo', '2');
-NOTICE: insert_event(que3, I, (dat1,dat2,dat3) values ('foo','2',null), public.custom_pkey)
+WARNING: insert_event(que3, I, (dat1,dat2,dat3) values ('foo','2',null), public.custom_pkey)
update custom_pkey set dat3 = 'bat';
-NOTICE: insert_event(que3, U, dat3='bat' where dat1='foo' and dat2='2', public.custom_pkey)
+WARNING: insert_event(que3, U, dat3='bat' where dat1='foo' and dat2='2', public.custom_pkey)
delete from custom_pkey;
-NOTICE: insert_event(que3, D, dat1='foo' and dat2='2', public.custom_pkey)
+WARNING: insert_event(que3, D, dat1='foo' and dat2='2', public.custom_pkey)
-- test custom fields
create table custom_fields (
dat1 text not null primary key,
@@ -91,32 +91,30 @@ create table custom_fields (
_pgq_ev_extra3 text default 'e3',
_pgq_ev_extra4 text default 'e4'
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "custom_fields_pkey" for table "custom_fields"
create trigger customf_triga after insert or update or delete on custom_fields
for each row execute procedure pgq.sqltriga('que3');
insert into custom_fields values ('foo', '2');
-NOTICE: insert_event(que3, my_type, (dat1,dat2,dat3) values ('foo','2',null), e1)
+WARNING: insert_event(que3, my_type, (dat1,dat2,dat3) values ('foo','2',null), e1)
update custom_fields set dat3 = 'bat';
-NOTICE: insert_event(que3, my_type, dat3='bat' where dat1='foo', e1)
+WARNING: insert_event(que3, my_type, dat3='bat' where dat1='foo', e1)
delete from custom_fields;
-NOTICE: insert_event(que3, my_type, dat1='foo', e1)
+WARNING: insert_event(que3, my_type, dat1='foo', e1)
-- test custom expression
create table custom_expr (
dat1 text not null primary key,
dat2 int2 not null,
dat3 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "custom_expr_pkey" for table "custom_expr"
create trigger customex_triga after insert or update or delete on custom_expr
for each row execute procedure pgq.sqltriga('que3', 'ev_extra1=''test='' || dat1', 'ev_type=dat3');
insert into custom_expr values ('foo', '2');
-NOTICE: insert_event(que3, <NULL>, (dat1,dat2,dat3) values ('foo','2',null), test=foo)
+WARNING: insert_event(que3, <NULL>, (dat1,dat2,dat3) values ('foo','2',null), test=foo)
update custom_expr set dat3 = 'bat';
-NOTICE: insert_event(que3, bat, dat3='bat' where dat1='foo', test=foo)
+WARNING: insert_event(que3, bat, dat3='bat' where dat1='foo', test=foo)
delete from custom_expr;
-NOTICE: insert_event(que3, bat, dat1='foo', test=foo)
+WARNING: insert_event(que3, bat, dat1='foo', test=foo)
-- test pk update
insert into rtest values (1, 'value1');
-NOTICE: insert_event(que3, I, (id,dat,dat2) values ('1','value1',null), public.rtest)
+WARNING: insert_event(que3, I, (id,dat,dat2) values ('1','value1',null), public.rtest)
update rtest set id = 2;
ERROR: primary key update not allowed
diff --git a/sql/pgq/expected/trunctrg.out b/sql/pgq/expected/trunctrg.out
index 2aba1302..2d56eaa4 100644
--- a/sql/pgq/expected/trunctrg.out
+++ b/sql/pgq/expected/trunctrg.out
@@ -1,26 +1,25 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
-- test sqltriga truncate
create table trunctrg1 (
dat1 text not null primary key,
dat2 int2 not null,
dat3 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "trunctrg1_pkey" for table "trunctrg1"
create trigger trunc1_trig after truncate on trunctrg1
for each statement execute procedure pgq.sqltriga('que3');
truncate trunctrg1;
-NOTICE: insert_event(que3, R, , public.trunctrg1)
+WARNING: insert_event(que3, R, , public.trunctrg1)
-- test logutriga truncate
create table trunctrg2 (
dat1 text not null primary key,
dat2 int2 not null,
dat3 text
);
-NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "trunctrg2_pkey" for table "trunctrg2"
create trigger trunc2_trig after truncate on trunctrg2
for each statement execute procedure pgq.logutriga('que3');
truncate trunctrg2;
-NOTICE: insert_event(que3, R, , public.trunctrg2)
+WARNING: insert_event(que3, R, , public.trunctrg2)
-- test deny
create trigger deny_triga2 after truncate on trunctrg2
for each statement execute procedure pgq.logutriga('noqueue', 'deny');
diff --git a/sql/pgq/pgq.control b/sql/pgq/pgq.control
index cef20d77..91d54de2 100644
--- a/sql/pgq/pgq.control
+++ b/sql/pgq/pgq.control
@@ -1,6 +1,6 @@
# pgq extension
comment = 'Generic queue for PostgreSQL'
-default_version = '3.1.2'
+default_version = '3.1.3'
relocatable = false
superuser = true
schema = 'pg_catalog'
diff --git a/sql/pgq/sql/logutriga.sql b/sql/pgq/sql/logutriga.sql
index e97b2dce..a43236ca 100644
--- a/sql/pgq/sql/logutriga.sql
+++ b/sql/pgq/sql/logutriga.sql
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
select 1 from (select set_config(name, 'escape', false) as ignore
from pg_settings where name = 'bytea_output') x
@@ -7,7 +8,7 @@ select 1 from (select set_config(name, 'escape', false) as ignore
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(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
+ raise warning 'insert_event(%, %, %, %)', queue_name, ev_type, ev_data, ev_extra1;
return 1;
end;
$$ language plpgsql;
diff --git a/sql/pgq/sql/pgq_core.sql b/sql/pgq/sql/pgq_core.sql
index b312f121..a0e633f0 100644
--- a/sql/pgq/sql/pgq_core.sql
+++ b/sql/pgq/sql/pgq_core.sql
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
select * from pgq.maint_tables_to_vacuum();
select * from pgq.maint_retry_events();
diff --git a/sql/pgq/sql/pgq_init_ext.sql b/sql/pgq/sql/pgq_init_ext.sql
index 3ed13776..c16524a8 100644
--- a/sql/pgq/sql/pgq_init_ext.sql
+++ b/sql/pgq/sql/pgq_init_ext.sql
@@ -2,6 +2,7 @@
-- create noext schema
\set ECHO none
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
\i structure/install.sql
select pgq.create_queue('testqueue1');
\set ECHO all
diff --git a/sql/pgq/sql/pgq_init_noext.sql b/sql/pgq/sql/pgq_init_noext.sql
index d33cd9c7..fdeb6bbb 100644
--- a/sql/pgq/sql/pgq_init_noext.sql
+++ b/sql/pgq/sql/pgq_init_noext.sql
@@ -1,7 +1,7 @@
\set ECHO none
\set VERBOSITY 'terse'
-
+set client_min_messages = 'warning';
-- \i ../txid/txid.sql
-- \i pgq.sql
\i structure/install.sql
diff --git a/sql/pgq/sql/pgq_init_upgrade.sql b/sql/pgq/sql/pgq_init_upgrade.sql
index 2197de16..0355df44 100644
--- a/sql/pgq/sql/pgq_init_upgrade.sql
+++ b/sql/pgq/sql/pgq_init_upgrade.sql
@@ -1,5 +1,6 @@
\set ECHO none
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
\i ../../upgrade/final/pgq_core_2.1.13.sql
\i ../../upgrade/final/pgq.upgrade_2.1_to_3.0.sql
\i pgq.upgrade.sql
diff --git a/sql/pgq/sql/sqltriga.sql b/sql/pgq/sql/sqltriga.sql
index f858f911..6bc96916 100644
--- a/sql/pgq/sql/sqltriga.sql
+++ b/sql/pgq/sql/sqltriga.sql
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
-- start testing
create table rtest (
diff --git a/sql/pgq/sql/trunctrg.sql b/sql/pgq/sql/trunctrg.sql
index f999dedc..34742d04 100644
--- a/sql/pgq/sql/trunctrg.sql
+++ b/sql/pgq/sql/trunctrg.sql
@@ -1,4 +1,5 @@
\set VERBOSITY 'terse'
+set client_min_messages = 'warning';
-- test sqltriga truncate
create table trunctrg1 (
diff --git a/sql/pgq/triggers/common.c b/sql/pgq/triggers/common.c
index e551de58..b06a62c8 100644
--- a/sql/pgq/triggers/common.c
+++ b/sql/pgq/triggers/common.c
@@ -30,6 +30,10 @@
#include <utils/builtins.h>
#include <utils/rel.h>
+#if PG_VERSION_NUM >= 90300
+#include <access/htup_details.h>
+#endif
+
#include "common.h"
#include "stringutil.h"
#include "qbuilder.h"
diff --git a/sql/pgq/triggers/qbuilder.h b/sql/pgq/triggers/qbuilder.h
index 72b8d7bb..e730c598 100644
--- a/sql/pgq/triggers/qbuilder.h
+++ b/sql/pgq/triggers/qbuilder.h
@@ -1,4 +1,6 @@
+#include <lib/stringinfo.h>
+
/*
* Callbacks that to argument name/type/value lookups.
*/
diff --git a/sql/pgq_ext/functions/pgq_ext.version.sql b/sql/pgq_ext/functions/pgq_ext.version.sql
index d3da90a3..ca323519 100644
--- a/sql/pgq_ext/functions/pgq_ext.version.sql
+++ b/sql/pgq_ext/functions/pgq_ext.version.sql
@@ -8,7 +8,7 @@ returns text as $$
-- only bumped when database code changes.
-- ----------------------------------------------------------------------
begin
- return '3.1.0.0';
+ return '3.1';
end;
$$ language plpgsql;
diff --git a/sql/pgq_node/Makefile b/sql/pgq_node/Makefile
index 2ea8b904..784455b3 100644
--- a/sql/pgq_node/Makefile
+++ b/sql/pgq_node/Makefile
@@ -1,8 +1,8 @@
EXTENSION = pgq_node
-EXT_VERSION = 3.1
-EXT_OLD_VERSIONS =
+EXT_VERSION = 3.1.3
+EXT_OLD_VERSIONS = 3.1
Extension_regress = pgq_node_init_ext pgq_node_test
Contrib_regress = pgq_node_init_noext pgq_node_test
diff --git a/sql/pgq_node/functions/pgq_node.version.sql b/sql/pgq_node/functions/pgq_node.version.sql
index 3985250c..17558b86 100644
--- a/sql/pgq_node/functions/pgq_node.version.sql
+++ b/sql/pgq_node/functions/pgq_node.version.sql
@@ -8,7 +8,7 @@ returns text as $$
-- and only bumped when database code changes.
-- ----------------------------------------------------------------------
begin
- return '3.1.0.0';
+ return '3.1.3';
end;
$$ language plpgsql;
diff --git a/sql/pgq_node/pgq_node.control b/sql/pgq_node/pgq_node.control
index a214cee6..1e7230e6 100644
--- a/sql/pgq_node/pgq_node.control
+++ b/sql/pgq_node/pgq_node.control
@@ -1,6 +1,6 @@
# pgq_node
comment = 'Cascaded queue infrastructure'
-default_version = '3.1'
+default_version = '3.1.3'
relocatable = false
superuser = true
schema = 'pg_catalog'
diff --git a/sql/ztestall.sh b/sql/ztestall.sh
new file mode 100755
index 00000000..04cc6b60
--- /dev/null
+++ b/sql/ztestall.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+set -e
+
+for pg in pg83 pg84 pg90 pg91 pg92 pg93; do
+ for mod in pgq pgq_coop pgq_node pgq_ext londiste; do
+ echo " #### $pg/$mod ####"
+ $pg make -s -C $mod clean test
+ done
+done
+