Add in a call to:
ALTER TABLE [table_name] ENABLE ALWAYS TRIGGER z_reorg_trigger so that pg_reorg and the z_reorg_trigger can properly work in "replica" mode, as when using pg_reorg on a Slony slave. Bug report and patch by Norman Yamada.
This commit is contained in:
parent
370e572cfc
commit
df12c37edf
@ -48,6 +48,7 @@ typedef struct reorg_table
|
||||
const char *create_pktype; /* CREATE TYPE pk */
|
||||
const char *create_log; /* CREATE TABLE log */
|
||||
const char *create_trigger; /* CREATE TRIGGER z_reorg_trigger */
|
||||
const char *alter_table; /* ALTER TABLE ENABLE ALWAYS TRIGGER z_reorg_trigger */
|
||||
const char *create_table; /* CREATE TABLE table AS SELECT */
|
||||
const char *drop_columns; /* ALTER TABLE DROP COLUMNs */
|
||||
const char *delete_log; /* DELETE FROM log */
|
||||
@ -288,6 +289,7 @@ reorg_one_database(const char *orderby, const char *table)
|
||||
table.create_pktype = getstr(res, i, c++);
|
||||
table.create_log = getstr(res, i, c++);
|
||||
table.create_trigger = getstr(res, i, c++);
|
||||
table.alter_table = getstr(res, i, c++);
|
||||
|
||||
create_table = getstr(res, i, c++);
|
||||
table.drop_columns = getstr(res, i, c++);
|
||||
@ -384,6 +386,7 @@ reorg_one_table(const reorg_table *table, const char *orderby)
|
||||
elog(DEBUG2, "create_pktype : %s", table->create_pktype);
|
||||
elog(DEBUG2, "create_log : %s", table->create_log);
|
||||
elog(DEBUG2, "create_trigger : %s", table->create_trigger);
|
||||
elog(DEBUG2, "alter_table : %s", table->alter_table);
|
||||
elog(DEBUG2, "create_table : %s", table->create_table);
|
||||
elog(DEBUG2, "drop_columns : %s", table->drop_columns ? table->drop_columns : "(skipped)");
|
||||
elog(DEBUG2, "delete_log : %s", table->delete_log);
|
||||
@ -417,6 +420,7 @@ reorg_one_table(const reorg_table *table, const char *orderby)
|
||||
command(table->create_pktype, 0, NULL);
|
||||
command(table->create_log, 0, NULL);
|
||||
command(table->create_trigger, 0, NULL);
|
||||
command(table->alter_table, 0, NULL);
|
||||
printfStringInfo(&sql, "SELECT reorg.disable_autovacuum('reorg.log_%u')", table->target_oid);
|
||||
command(sql.data, 0, NULL);
|
||||
command("COMMIT", 0, NULL);
|
||||
|
@ -78,6 +78,14 @@ $$
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_alter_table(relid oid)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT 'ALTER TABLE ' || reorg.oid2text($1) ||
|
||||
' ENABLE ALWAYS TRIGGER z_reorg_trigger';
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_assign(oid, text) RETURNS text AS
|
||||
$$
|
||||
SELECT '(' || array_to_string(reorg.array_accum(quote_ident(attname)), ', ') ||
|
||||
@ -168,6 +176,7 @@ CREATE VIEW reorg.tables AS
|
||||
reorg.get_create_index_type(PK.indexrelid, 'reorg.pk_' || R.oid) AS create_pktype,
|
||||
'CREATE TABLE reorg.log_' || R.oid || ' (id bigserial PRIMARY KEY, pk reorg.pk_' || R.oid || ', row ' || reorg.oid2text(R.oid) || ')' AS create_log,
|
||||
reorg.get_create_trigger(R.oid, PK.indexrelid) AS create_trigger,
|
||||
reorg.get_alter_table(R.oid) as alter_table,
|
||||
'CREATE TABLE reorg.table_' || R.oid || ' WITH (' || array_to_string(array_append(R.reloptions, 'oids=' || CASE WHEN R.relhasoids THEN 'true' ELSE 'false' END), ',') || ') TABLESPACE ' || coalesce(quote_ident(S.spcname), 'pg_default') || ' AS SELECT ' || reorg.get_columns_for_create_as(R.oid) || ' FROM ONLY ' || reorg.oid2text(R.oid) AS create_table,
|
||||
reorg.get_drop_columns(R.oid, 'reorg.table_' || R.oid) AS drop_columns,
|
||||
'DELETE FROM reorg.log_' || R.oid AS delete_log,
|
||||
|
Loading…
x
Reference in New Issue
Block a user