londiste.upgrade.sql: $(FUNCS)
cat $(FUNCS) > $@
+test: londiste.sql
+ make installcheck || { less regression.diffs; exit 1; }
+
select londiste.subscriber_remove_seq('pqueue', 'public.testdata_seq');
ERROR: no such seq?
+--
+-- skip-truncate, set_table_state
+--
+select londiste.subscriber_add_table('pqueue', 'public.skiptest');
+ subscriber_add_table
+----------------------
+ 0
+(1 row)
+
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate
+---------------
+
+(1 row)
+
+select londiste.subscriber_set_skip_truncate('pqueue', 'public.skiptest', true);
+ subscriber_set_skip_truncate
+------------------------------
+ 1
+(1 row)
+
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate
+---------------
+ t
+(1 row)
+
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', 'snap1', 'in-copy');
+ subscriber_set_table_state
+----------------------------
+ 1
+(1 row)
+
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate | snapshot
+---------------+----------
+ t | snap1
+(1 row)
+
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', null, 'ok');
+ subscriber_set_table_state
+----------------------------
+ 1
+(1 row)
+
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate | snapshot
+---------------+----------
+ |
+(1 row)
+
--- /dev/null
+
+create or replace function londiste.subscriber_set_skip_truncate(
+ i_queue text,
+ i_table text,
+ i_value bool)
+returns integer as $$
+begin
+ update londiste.subscriber_table
+ set skip_truncate = i_value
+ where queue_name = i_queue
+ and table_name = i_table;
+ if not found then
+ raise exception 'table not found';
+ end if;
+
+ return 1;
+end;
+$$ language plpgsql security definer;
+
begin
update londiste.subscriber_table
set snapshot = i_snapshot,
- merge_state = i_merge_state
+ merge_state = i_merge_state,
+ -- reset skip_snapshot when table is copied over
+ skip_truncate = case when i_merge_state = 'ok'
+ then null
+ else skip_truncate
+ end
where queue_name = i_queue_name
and table_name = i_table_name;
if not found then
select londiste.subscriber_add_seq('pqueue', 'public.testdata_id_seq');
select londiste.subscriber_remove_seq('pqueue', 'public.testdata_seq');
+--
+-- skip-truncate, set_table_state
+--
+
+select londiste.subscriber_add_table('pqueue', 'public.skiptest');
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_skip_truncate('pqueue', 'public.skiptest', true);
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', 'snap1', 'in-copy');
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', null, 'ok');
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+
merge_state text,
trigger_name text,
+ skip_truncate bool,
+
primary key (queue_name, table_name)
);