diff options
author | Tarvi Pillessaar | 2012-12-31 08:00:25 +0000 |
---|---|---|
committer | Tarvi Pillessaar | 2012-12-31 08:00:25 +0000 |
commit | 37ac1314a3fbf1f87069a2fc20cd12d41bd1466b (patch) | |
tree | aaa888082ec6f015e054fc4addc7e191221eb870 | |
parent | 9a623e11cde1c865f65b7d3685e7ccbccb07a648 (diff) | |
parent | 7c1badd99e24d71bc8f91998b454345af28e86f5 (diff) |
Merge remote-tracking branch 'remotes/marko-github/master'
43 files changed, 223 insertions, 138 deletions
@@ -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 @@ -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 + |