参考文档:
http://postgres.cn/docs/11/sql-createtable.html
http://postgres.cn/docs/10/sql-createview.html
--- 基于会话的临时表(默认),会话结束,表消失
-- 会话1中创建临时表,在当前会话中查看该表 ,可以看到该表的schema为pg_temp_5,可以访问该表
create temporary table tmp_t1 (id int primary key,name text);
mydb=# create temporary table tmp_t1 (id int primary key,name text);
CREATE TABLE
mydb=# \d
List of relations
Schema | Name | Type | Owner
-----------+----------------+-------+----------
pg_temp_5 | tmp_t1 | table | postgres
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(4 rows)
mydb=#
mydb=# select * from pg_temp_5.tmp_t1;
id | name
----+------
(0 rows)
mydb=#
-- 重新开一个会话,查看表,发现看不到该临时表 ,但是尝试加上schema,可以看到该表,尝试访问该表,不允许
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(3 rows)
mydb=#
mydb=# \d pg_temp_5.tmp_t1
Table "pg_temp_5.tmp_t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
name | text | | |
Indexes:
"tmp_t1_pkey" PRIMARY KEY, btree (id)
mydb=#
mydb=# select * from pg_temp_5.tmp_t1;
ERROR: cannot access temporary tables of other sessions
mydb=#
-- 在会话1中插入数据,会话2中仍然是查询不到数据的
insert into tmp_t1 values(1,'aaa'),(2,'bbb');
mydb=# insert into tmp_t1 values(1,'aaa'),(2,'bbb');
INSERT 0 2
mydb=# select * from tmp_t1;
id | name
----+------
1 | aaa
2 | bbb
(2 rows)
mydb=#
mydb=# select * from pg_temp_5.tmp_t1;
ERROR: cannot access temporary tables of other sessions
mydb=#
--测试,离开会话。可以看到,默认情况下,临时表是会话级别的。离开这个会话,再次连接数据库,发现这个表消失了
mydb=# \q
[root@test /root]$psql -d mydb
psql.bin (10.15)
Type "help" for help.
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(3 rows)
mydb=#
-- 基于事务的临时表 ,事务结束,表还是存在的,但是表中数据不存在了
create temporary table tmp_t2 (id int primary key,name text) on commit delete rows;
insert into tmp_t2 values(1,'aaa'),(2,'bbb'); -- 如果这样,使用自动提交事务,则插入语句后,查询结果是0记录
mydb=# create temporary table tmp_t2 (id int primary key,name text) on commit delete rows;
CREATE TABLE
mydb=# \d
List of relations
Schema | Name | Type | Owner
-----------+----------------+-------+----------
pg_temp_4 | tmp_t2 | table | postgres
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(4 rows)
-- 在事务中查看
begin ;
insert into tmp_t2 values(1,'aaa'),(2,'bbb');
select * from tmp_t2 ;
mydb=# begin ;
BEGIN
mydb=# select * from tmp_t2;
id | name
----+------
(0 rows)
mydb=# insert into tmp_t2 values(1,'aaa'),(2,'bbb');
INSERT 0 2
mydb=# select * from tmp_t2;
id | name
----+------
1 | aaa
2 | bbb
(2 rows)
mydb=#
mydb=# \d pg_temp_4.tmp_t2 -- 在另一个会话中查看 ,可以看到表,但是不允许访问
mydb=# \d pg_temp_4.tmp_t2
Table "pg_temp_4.tmp_t2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
name | text | | |
Indexes:
"tmp_t2_pkey" PRIMARY KEY, btree (id)
mydb=# select * from pg_temp_4.tmp_t2;
ERROR: cannot access temporary tables of other sessions
mydb=#
-- 结束事务,再次查看表,结果是事务结束,表中数据消失,表还存在 。
mydb=# commit;
COMMIT
mydb=# \d
List of relations
Schema | Name | Type | Owner
-----------+----------------+-------+----------
pg_temp_4 | tmp_t2 | table | postgres
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(4 rows)
mydb=# select * from tmp_t2;
id | name
----+------
(0 rows)
mydb=# \d
List of relations
Schema | Name | Type | Owner
-----------+----------------+-------+----------
pg_temp_4 | tmp_t2 | table | postgres
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(4 rows)
mydb=#
-- 临时视图,当创建一个临时视图的时候,会话结束后,视图消失
create temp view v_pub_t1 as select * from pub_t1 where id <10;
select count(*) from v_pub_t1;
mydb=# create temp view v_pub_t1 as select * from pub_t1 where id <10;
CREATE VIEW
mydb=# \d v_pub_t1
View "pg_temp_5.v_pub_t1"
Column | Type | Collation | Nullable | Default
----------+-----------------------------+-----------+----------+---------
id | integer | | |
name | text | | |
crt_time | timestamp without time zone | | |
\d: extra argument ";" ignored
mydb=#
mydb=# select count(*) from v_pub_t1;
count
-------
(1 row)
mydb=#
mydb=# \d
List of relations
Schema | Name | Type | Owner
-----------+----------------+-------+----------
pg_temp_5 | v_pub_t1 | view | postgres
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(4 rows)
mydb=#
-- 在备库上能看到这个视图吗?经过测试,在备库上,是看不到这个视图的
-- 断开会话,再次查看,发现视图不见了
mydb=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | pg_buffercache | view | postgres
public | pub_t1 | table | postgres
public | t | table | postgres
(3 rows)
mydb=#
参考文档:http://postgres.cn/docs/11/sql-createtable.htmlhttp://postgres.cn/docs/10/sql-createview.html--- 基于会话的临时表(默认),会话结束,表消失-- 会话1中创建临时表,在当前会话中查看该表 ,可以看到该表的schema为pg_temp_5,可以访问该表create temporary table tmp_t1 (id int primary key,name text);mydb=#
PostgreS
QL支持两类临时
表
,会话级和事务级临时
表
。在会话级别的临时
表
中,在整个会话的生命周期中,数据一直保存。事务级临时
表
,数据只存在于这个事务的生命周期中。不指定临时
表
的属性,
PostgreS
QL中,不管是事务级还是会话级临时
表
,当会话结束时,临时
表
就会消失。这与oracle数据库不同,在oracle数据库中,只是临时
表
中的数据消失,而临时
表
还存在。
创建临时
表
temp
PostgreS
QL中的临时
表
分两种,一种是会话级临时
表
,一种是事务级临时
表
。
在会话级临时
表
中,数据可以存在于整个会话的生命周期中;
在事务级临时
表
中的数据只能存在于事务的生命周期中。
默认创建的是会话级别的临时
表
。
不管是会话级还是事务级的临时
表
,当会话结束后,临时
表
就会被回收。
“ON COMMIT” 子句有三种形式,默认使用的是PRESERVE ROWS,即会话临时
表
:
1)ON COMMIT PRESERVE ROWS
表
示临时
表
的数据在事务结束后保留,默认值,
表
示会话级临时
表
;
2)ON COM
Postgres
ql中临时
表
(temporary table)的特性和用法
【
PostgreS
QL-9.6.3】临时
表
PostgreS
QL SELECT INTO和INSERT INTO SELECT 两种
表
复制语句
如何在
postgres
ql 函数中创建临时
表
???
临时
表
解释:
PostgreS
QL中的临时
表
分两种,一种是会话级临时
表
,一种是事务级临时
表
。在会话级临时
表
...
ddxu:
需要使用新应用以打开此WindowsDefender链接
拯救阿标:
需要使用新应用以打开此WindowsDefender链接
拯救阿标:
mysql_config_editor的配置
白话机器学习: