ON COMMIT DELETE ROWS:指定当事务提交后,表中的所有行将被删除。
ON COMMIT PRESERVE ROWS:指定当事务提交后,表中的行将被保留。这意味着即使事务提交,数据仍然保留在表中。
以下均在金仓kingbase数据库兼容oracle模式中测试
普通临时表
会话退出表被删除,其他会话无法可见该临时表,它所在的模式是pg_temp开头随机生成的,不指定on commit子句的话默认行为是ON COMMIT PRESERVE ROWS
test=# create temp table t2(id int) ON COMMIT DELETE ROWS;
CREATE TABLE
test=# insert into t2 values(100);
INSERT 0 1
test=# select * from t2;
id
----
(0 行记录)
test=# select relnamespace::regnamespace,relname,relkind,relpersistence from sys_class where relname='t2';
relnamespace | relname | relkind | relpersistence
--------------+---------+---------+----------------
pg_temp_4 | t2 | r | t
(1 行记录)
[kingbase@node1 ~]$ ksql test system -p12346
输入 "help" 来获取帮助信息.
test=# select relnamespace::regnamespace,relname,relkind,relpersistence from sys_class where relname='t2';
relnamespace | relname | relkind | relpersistence
--------------+---------+---------+----------------
(0 行记录)
全局临时表
会话退出表不会被删除,删除需要使用drop table手工删除,它有自己的业务模式,所有会话都能查到该表,但各自会话生成的数据互相不能看见。不指定on commit子句的话默认行为是ON COMMIT DELETE ROWS
CREATE GLOBAL TEMPORARY TABLE global_temp_orders (
order_id integer,
amount numeric(10, 2)
) ON COMMIT DELETE ROWS;
test=# CREATE GLOBAL TEMPORARY TABLE global_temp_orders (
test(# order_id integer,
test(# amount numeric(10, 2)
test(# ) ON COMMIT DELETE ROWS;
CREATE TABLE
test=# insert into global_temp_orders(order_id) values(1);
INSERT 0 1
test=# select * from global_temp_orders;
order_id | amount
----------+--------
(0 行记录)
test=# select relnamespace::regnamespace,relname,relkind,relpersistence from sys_class where relname='global_temp_orders';
relnamespace | relname | relkind | relpersistence
--------------+--------------------+---------+----------------
public | global_temp_orders | r | x
(1 行记录)
test=# \q
您在 /var/spool/mail/kingbase 中有新邮件
[kingbase@node1 ~]$ ksql test system -p12346
输入 "help" 来获取帮助信息.
test=# select relnamespace::regnamespace,relname,relkind,relpersistence from sys_class where relname='global_temp_orders';
relnamespace | relname | relkind | relpersistence
--------------+--------------------+---------+----------------
public | global_temp_orders | r | x
(1 行记录)
test=# drop table global_temp_orders ;
DROP TABLE
test=#
1万+

被折叠的 条评论
为什么被折叠?



