Re: [Proposal] Global temporary tables - Mailing list pgsql-hackers
From | 曾文旌(义从) |
---|---|
Subject | Re: [Proposal] Global temporary tables |
Date | |
Msg-id | 24695418-20C4-49B3-B6A3-5457E2352C71@alibaba-inc.com Whole thread Raw |
In response to | Re: [Proposal] Global temporary tables (tushar <tushar.ahuja@enterprisedb.com>) |
List | pgsql-hackers |
For now, If one dba wants to drop one GTT,2020年3月16日 下午4:58,tushar <tushar.ahuja@enterprisedb.com> 写道:Hi Wenjing,I have created a global table on X session but i am not able to drop from Y session ?X session - ( connect to psql terminal )postgres=# create global temp table foo(n int);
CREATE TABLE
postgres=# select * from foo;
n
---
(0 rows)Y session - ( connect to psql terminal )postgres=# drop table foo;
ERROR: can not drop relation foo when other backend attached this global temp table
he can use the view pg_gtt_attached_pids to see which backends are using this GTT.
then kill these sessions with pg_terminate_backend, and he can drop this GTT.
Table has been created so i think - user should be able to drop from another session as well without exit from X session.regards,On 3/16/20 1:35 PM, 曾文旌(义从) wrote:2020年3月16日 下午2:23,Prabhat Sahu <prabhat.sahu@enterprisedb.com> 写道:Hi Wenjing,Please check the below scenario, where the Foreign table on GTT not showing records.postgres=# select * from gtt1;
postgres=# create extension postgres_fdw;
CREATE EXTENSION
postgres=# do $d$
begin
execute $$create server fdw foreign data wrapper postgres_fdw options (host 'localhost',dbname 'postgres',port '$$||current_setting('port')||$$')$$;
end;
$d$;
DO
postgres=# create user mapping for public server fdw;
CREATE USER MAPPING
postgres=# create table lt1 (c1 integer, c2 varchar(50));
CREATE TABLE
postgres=# insert into lt1 values (1,'c21');
INSERT 0 1
postgres=# create foreign table ft1 (c1 integer, c2 varchar(50)) server fdw options (table_name 'lt1');
CREATE FOREIGN TABLE
postgres=# select * from ft1;
c1 | c2
----+-----
1 | c21
(1 row)
postgres=# create global temporary table gtt1 (c1 integer, c2 varchar(50));
CREATE TABLE
postgres=# insert into gtt1 values (1,'gtt_c21');
INSERT 0 1
postgres=# create foreign table f_gtt1 (c1 integer, c2 varchar(50)) server fdw options (table_name 'gtt1');
CREATE FOREIGN TABLE
c1 | c2
----+---------
1 | gtt_c21
(1 row)postgres=# select * from f_gtt1;
c1 | c2
----+----
(0 rows)--I understand that postgre_fdw works similar to dblink.postgre_fdw access to the table requires a new connection.The data in the GTT table is empty in the newly established connection.Because GTT shares structure but not data between connections.Try local temp table:create temporary table ltt1 (c1 integer, c2 varchar(50));insert into ltt1 values (1,'gtt_c21');create foreign table f_ltt1 (c1 integer, c2 varchar(50)) server fdw options (table_name 'ltt1');select * from ltt1;c1 | c2----+---------1 | gtt_c21(1 row)select * from l_gtt1;ERROR: relation "l_gtt1" does not existLINE 1: select * from l_gtt1;WenjingWith Regards,
Prabhat Kumar Sahu
EnterpriseDB: http://www.enterprisedb.com
-- regards,tushar EnterpriseDB https://www.enterprisedb.com/ The Enterprise PostgreSQL Company
pgsql-hackers by date: