blob: 188c45baa82d459d4893fb8140b160d8b1f97b1e [file] [log] [blame]
CREATE SCHEMA temp_relation;
SET search_path TO temp_relation;
-- Table relfilenodenames is used to get refilenodename after temp table has been droped.
CREATE TABLE relfilenodenames(segid int, relfilenodename text) distributed replicated;
create function get_temp_rel_relfilename(rel text) returns text as $$
relfilenodename = plpy.execute("SELECT \'t_\' || relfilenode AS relfilenodename FROM pg_class WHERE relname=\'" + rel + "\';")[0]['relfilenodename']
return relfilenodename
$$ language plpython3u;
-- Functions to assert physical existence of a temp relfilenode
CREATE FUNCTION temp_relfilenode_coordinator() RETURNS TABLE(gp_segment_id int)
STRICT STABLE LANGUAGE SQL AS
$fn$
WITH
db_relfilenodenames AS
(SELECT gp_execution_segment(),pg_ls_dir('./base/' || t.dboid || '/') AS relfilenodename
FROM (SELECT oid AS dboid FROM pg_database WHERE datname = 'regression') t)
SELECT d.gp_execution_segment
FROM relfilenodenames r, db_relfilenodenames d
WHERE r.relfilenodename = d.relfilenodename and r.segid = d.gp_execution_segment;
$fn$
EXECUTE ON COORDINATOR;
CREATE FUNCTION temp_relfilenode_segments() RETURNS TABLE(gp_segment_id int)
STRICT STABLE LANGUAGE SQL AS
$fn$
WITH
db_relfilenodenames AS
(SELECT gp_execution_segment(),pg_ls_dir('./base/' || t.dboid || '/') AS relfilenodename
FROM (SELECT oid AS dboid FROM pg_database WHERE datname = 'regression') t)
SELECT d.gp_execution_segment
FROM relfilenodenames r, db_relfilenodenames d
WHERE r.relfilenodename = d.relfilenodename and r.segid = d.gp_execution_segment;
$fn$
EXECUTE ON ALL SEGMENTS;
-- When we create a temporary table
CREATE TEMPORARY TABLE temp_table(i int);
-- Relfilenodename may be different between coordinator and segments.
insert into relfilenodenames
select -1, get_temp_rel_relfilename('temp_table')
union
select gp_segment_id,get_temp_rel_relfilename('temp_table') from gp_dist_random('gp_id');
-- The table's relfilenode physically exists on the coordinator and the segment primaries
SELECT temp_relfilenode_coordinator();
SELECT temp_relfilenode_segments();
DROP TABLE temp_table;
-- The table's file is cleaned up on the coordinator and the segment primaries
SELECT temp_relfilenode_coordinator();
SELECT temp_relfilenode_segments();
DROP SCHEMA temp_relation CASCADE;