当我在PostgreSQL中运行脚本时,我通常会从psql
执行以下操作:
my_database> \i my_script.sql
my_script.sql
中的位置可能包含以下代码:
select a.run_uid, s.object_uid into temp_table from dt.table_run_group as a
inner join dt.table_segment as s on a.group_uid = s.object_uid;
在这种特殊情况下,我只对使用查询结果创建temp_table
感兴趣。
这些结果是否在服务器上的磁盘中?在记忆中?表是永久存储的吗?
答案 0 :(得分:2)
临时表存储在RAM中,直到可用内存用完为止,此时它们会溢出到磁盘上。此处的相关设置为temp_buffers
。
无论哪种方式,它们都会在会话期间生效,并在结束时自动删除。
您也可以在事务结束时自动删除它们(ON COMMIT DROP
)或随时手动删除它们。
临时表仅对同一会话中的同一用户可见。其他人无法访问它 - 也不会与之发生冲突。
始终使用CREATE TABLE tbl AS ...
。不鼓励使用替代形式SELECT ... INTO tbl
,因为它与plpgsql中的INTO
子句冲突。
您的查询可能如下所示:
CREATE TEMP TABLE tbl AS
SELECT a.run_uid, s.object_uid
FROM dt.table_run_group a
JOIN dt.table_segment s ON a.group_uid = s.object_uid;
答案 1 :(得分:1)
SELECT INTO table ...
与CREATE TABLE table AS ...
相同,后者会创建一个普通的永久表格。