作者简介
Hans-JürgenSchönig从90年代开始从事PostgreSQL的相关工作。他是CYBERTEC的首席执行官兼技术主管,CYBERTEC是该领域的市场领导者之一,自2000年以来已为全球无数客户提供服务。
译者简介
孟令彬&崔鹏&海能达DBA团队,任职于海能达通信股份有限公司哈尔滨平台中心,数据库开发工程师,致力于PostgreSQL数据库在专网通信领域、公共安全领域的应用与推广,个人兴趣主要集中在:数据库优化、高性能/高可用数据库架构设计与开源数据库的源码研究。
校对者简介
赵全明 任职于华为技术有限公司,数据库内核开发工程师,致力于PostgreSQL在全行业的应用与推广。
前言
临时表特性已经存在了很长时间,并且被应用程序开发者广泛使用。但是,临时表的功能远远超出了您的了解。PostgreSQL允许您很好地配置临时表的期限,并帮助避免一些常见的陷阱。
创建临时表…
默认情况下,临时表的生命周期与数据库连接相同。断开连接后,它将立即被清除。在许多情况下,这是人们预期的行为:
tmp=# CREATE TEMPORARY TABLE x (id int);
CREATE TABLE
tmp=# \d
List of relations
Schema | Name | Type | Owner
-----------+------+-------+-------
pg_temp_3 | x | table | hs
(1 row)
tmp=# \q
iMac:~ hs$ psql tmp
psql (12.3)
Type "help" for help.
tmp=# \d
Did not find any relations.
一旦我们重新连接,临时表就永远消失了。另外,请记住,临时表仅在您的会话中可见。其他连接将不会看到该表(当然,这是我们所预期的行为)。这也意味着许多会话可以创建相同名称的临时表。
但是,临时表的功能可不止这些。最重要的是控制事务提交时下一步行为的能力:
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
如您所见,有三个选项。” PRESERVE ROWS”是您刚刚看到的行为。有时您不想要那样。也可以在提交时清空临时表:
tmp=# BEGIN;
BEGIN
tmp=# CREATE TEMP TABLE x ON COMMIT DELETE ROWS AS
SELECT * FROM generate_series(1, 5) AS y;
SELECT 5
tmp=# SELECT * FROM x;
y
---
1
2
3
4
5
(5 rows)
tmp=# COMMIT;
COMMIT
tmp=# SELECT * FROM x;
y
---
(0 rows)
在这种情况下,只要事务结束,留下的就是一个空表。临时表本身仍然存在并且可以继续使用。
现在让我们删掉临时表:
tmp=# DROP TABLE x;
DROP TABLE
有时您希望整个表在事务结束时消失:“ ON COMMIT DROP”可用来实现这一点:
tmp=# BEGIN;
BEGIN
tmp=# CREATE TEMP TABLE x ON COMMIT DROP AS
SELECT * FROM generate_series(1, 5) AS y;
SELECT 5
tmp=# COMMIT;
COMMIT
tmp=# SELECT * FROM x;
ERROR: relation "x" does not exist
LINE 1: SELECT * FROM x;
PostgreSQL将抛出错误,因为该表已经消失。值得注意的是,您仍然可以使用WITH HOLD游标,如下面的示例所示:
tmp=# BEGIN;
BEGIN
tmp=# CREATE TEMP TABLE x ON COMMIT DROP AS SELECT * FROM generate_series(1, 5) AS y;
SELECT 5
tmp=# DECLARE mycur CURSOR WITH HOLD FOR SELECT * FROM x;
DECLARE CURSOR
tmp=# COMMIT;
COMMIT
tmp=# FETCH ALL FROM mycur;
y
---
1
2
3
4
5
(5 rows)
临时表已经消失了,但是WITH HOLD游标将确保游标的“内容”即使在事务结束后仍然存在。许多人并不期望这种行为,但是这很有意义并且可以派上用场。
控制内存使用量…
如果使用临时表,则使它们保持相对较小是有意义的。但是,在某些情况下,由于某种原因,临时表可能会很大。为了确保性能保持良好,您可以告诉PostgreSQL在RAM中为临时表留出更多的空间。在这种情况下,你可以关注postgresql.conf中的temp_buffers参数:
tmp=# SHOW temp_buffers;
temp_buffers
--------------
8MB
(1 row)
默认值为8 MB。如果您的临时表很大,有必要设置该参数的值更大一些。
原文出处

http://shengshun.njtcbmw.cn/jingzhou/ http://huilong.sctcbmw.cn/cqzx/ https://fenlei.tiancebbs.cn/jstz/ http://nalei.zjtcbmw.cn/bjqzw/ http://huilong.sctcbmw.cn/hdqtj/ http://gx.lztcxxw.cn/jscz/ https://fenlei.tiancebbs.cn/simao/ https://lianpingxian.tiancebbs.cn/ http://tuiguang.hntcxxw.cn/che/ https://fenlei.tiancebbs.cn/xingtai/ http://ty.cqtcxxw.cn/gchuan/ https://huangcunzhen.tiancebbs.cn/ http://tuiguang.hntcxxw.cn/linxia/ http://huaguang.jxtcbmw.cn/twgx/ http://yz.cqtcxxw.cn/hgqza/ http://tuiguang.hntcxxw.cn/huizhou/ http://gx.lztcxxw.cn/twms/
https://aihuishou.tiancebbs.cn/sh/2777.html https://dl.tiancebbs.cn/qths/473738.html https://www.tiancebbs.cn/ershoufang/472813.html https://www.tiancebbs.cn/ershoufang/468880.html https://taicang.tiancebbs.cn/hjzl/466404.html https://su.tiancebbs.cn/hjzl/468090.html https://su.tiancebbs.cn/hjzl/462193.html https://zulin.tiancebbs.cn/sh/3611.html https://zulin.tiancebbs.cn/sh/3340.html https://zulin.tiancebbs.cn/sh/2635.html https://xinzhou.tiancebbs.cn/qths/472510.html https://zulin.tiancebbs.cn/sh/364.html https://su.tiancebbs.cn/hjzl/459543.html https://aihuishou.tiancebbs.cn/sh/3894.html https://aihuishou.tiancebbs.cn/sh/3549.html https://zulin.tiancebbs.cn/sh/584.html https://zulin.tiancebbs.cn/sh/3048.html
热血传奇行会名字:https://www.nanss.com/mingcheng/20639.html 与法同行作文:https://www.nanss.com/xuexi/18622.html 七年级英语教学总结:https://www.nanss.com/gongzuo/20471.html 觉醒年代观后感800字:https://www.nanss.com/gongzuo/zhuanti/20744.html 村晚改写短文:https://www.nanss.com/xuexi/20584.html 分数的意义练习题:https://www.nanss.com/xuexi/19275.html 调薪申请书:https://www.nanss.com/gongzuo/20332.html 处罚通知单:https://www.nanss.com/gongzuo/18689.html 六一居士是:https://www.nanss.com/wenti/18246.html 我最喜欢的一句名言作文:https://www.nanss.com/xuexi/19272.html 虾和7种食物不能一起吃:https://www.nanss.com/yinshi/19518.html 有格局的昵称:https://www.nanss.com/mingcheng/20245.html 研究报告:https://www.nanss.com/gongzuo/18679.html 钱学森的事迹:https://www.nanss.com/gongzuo/19076.html 适合合唱的歌:https://www.nanss.com/shenghuo/20547.html 金字旁的字取名男孩:https://www.nanss.com/mingcheng/20254.html 卫生与健康:https://www.nanss.com/xuexi/20193.html 2024独特霸气网名女:https://www.nanss.com/mingcheng/20232.html 车位出租协议:https://www.nanss.com/gongzuo/20221.html 茼蒿原产地:https://www.nanss.com/shenghuo/19799.html 党员年终总结:https://www.nanss.com/gongzuo/20299.html 质检员岗位职责:https://www.nanss.com/gongzuo/20508.html 司马迁朝代:https://www.nanss.com/xuexi/18503.html 卢沟桥的历史意义:https://www.nanss.com/shenghuo/20135.html 文章摘抄:https://www.nanss.com/yuedu/20267.html 象征爱情的花:https://www.nanss.com/shenghuo/20412.html 屈原为什么投河而死:https://www.nanss.com/wenti/18193.html 商品销售合同:https://www.nanss.com/gongzuo/18746.html 女生冷门又高薪的职业:https://www.nanss.com/gongzuo/20680.html 藏族的风俗习惯:https://www.nanss.com/shenghuo/18260.html