DROP TABLE IF EXISTS tbl;
NOTICE: table "tbl" does not exist, skipping
DROP TABLE IF EXISTS data_redis_tmp_54321;
NOTICE: table "data_redis_tmp_54321" does not exist, skipping
CREATE OR REPLACE FUNCTION pg_get_redis_rel_end_ctid(text)
RETURNS tid
AS '@abs_bindir@/../lib/postgresql/gsredistribute@DLSUFFIX@','pg_get_redis_rel_end_ctid'
LANGUAGE C STABLE not fenced;
CREATE OR REPLACE FUNCTION pg_get_redis_rel_start_ctid(text)
RETURNS tid
AS '@abs_bindir@/../lib/postgresql/gsredistribute@DLSUFFIX@','pg_get_redis_rel_start_ctid'
LANGUAGE C STABLE not fenced;
CREATE SCHEMA data_redis;
CREATE TABLE tbl(i int, j int);
CREATE TABLE data_redis_tmp_54321(LIKE tbl INCLUDING STORAGE INCLUDING RELOPTIONS INCLUDING DISTRIBUTION INCLUDING CONSTRAINTS, nodeid int, tupleid tid);
INSERT INTO tbl VALUES (generate_series(1, 200), 5);
-- phase 1
ALTER TABLE tbl SET(append_mode=on, rel_cn_oid=16389);
\d+ tbl
Table "public.tbl"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
i | integer | | plain | |
j | integer | | plain | |
Has OIDs: no
Distribute By: HASH(i)
Location Nodes: ALL DATANODES
Options: orientation=row, compression=no, append_mode=on, rel_cn_oid=16389, append_mode_internal=1, start_ctid_internal=(0.0), end_ctid_internal=(0.0)
INSERT INTO data_redis_tmp_54321
SELECT *, xc_node_id, ctid
FROM ONLY tbl
WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl') AND pg_get_redis_rel_end_ctid('tbl');
SELECT count(*) FROM data_redis_tmp_54321;
count
-------
200
(1 row)
SELECT 'Check result return code: ' || count(*)
FROM
(
SELECT i, j, ctid FROM tbl
MINUS ALL
SELECT i, j, tupleid FROM data_redis_tmp_54321
);
?column?
-----------------------------
Check result return code: 0
(1 row)
-- phase 2
DELETE FROM tbl;
ERROR: delete delta table pg_delete_delta_16389 is not found when do cluster resizing table "tbl"
DELETE FROM data_redis_tmp_54321;
INSERT INTO tbl VALUES (generate_series(201, 500), 5);
ALTER TABLE tbl SET(append_mode=on, rel_cn_oid=16389);
INSERT INTO data_redis_tmp_54321
SELECT *, xc_node_id, ctid FROM ONLY tbl
WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl')
AND pg_get_redis_rel_end_ctid('tbl');
SELECT count(*) FROM data_redis_tmp_54321;
count
-------
300
(1 row)
SELECT count(*) FROM tbl;
count
-------
500
(1 row)
SELECT 'Check result return code: ' || count(*)
FROM
(
SELECT i, j, ctid FROM tbl
MINUS all
SELECT i, j, tupleid FROM data_redis_tmp_54321
);
?column?
-------------------------------
Check result return code: 200
(1 row)
SELECT count(*) FROM data_redis_tmp_54321;
count
-------
300
(1 row)
ALTER TABLE tbl SET(append_mode=refresh, rel_cn_oid=16389);
INSERT INTO data_redis_tmp_54321
SELECT *, xc_node_id, ctid FROM ONLY tbl
WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl')
AND pg_get_redis_rel_end_ctid('tbl');
SELECT count(*) FROM data_redis_tmp_54321;
count
-------
800
(1 row)
SELECT count(*) FROM tbl;
count
-------
500
(1 row)
SELECT 'Check result return code: ' || count(*)
FROM
(
SELECT i, j, ctid FROM tbl
MINUS all
SELECT i, j, tupleid FROM data_redis_tmp_54321
);
?column?
-----------------------------
Check result return code: 0
(1 row)
SELECT count(*) FROM data_redis_tmp_54321;
count
-------
800
(1 row)
ALTER TABLE tbl SET(append_mode=off);
-- drop hash table in shmem
DROP TABLE IF EXISTS tbl;
DROP TABLE IF EXISTS data_redis_tmp_54321;
DROP SCHEMA data_redis CASCADE;
DROP FUNCTION IF EXISTS pg_get_redis_rel_end_ctid;
DROP FUNCTION IF EXISTS pg_get_redis_rel_start_ctid;