PostgreSQL CREATE TEMPORARY TABLE 临时表
本文介绍了什么是 PostgreSQL 临时表以及如何使用临时表。
PostgreSQL 临时表是一种特殊的表,他们只在会话期间存在。临时表会在会话结束的时候被自动删除。
创建 PostgreSQL 临时表
您可以使用 CREATE TEMPORARY TABLE
语句像创建普通表一样创建临时表,如下:
CREATE { TEMPORARY | TEMP } TABLE temp_table_name (
column_name data_type column_contraint
[, ...]
table_constraint
);
相比于常规的 CREATE TABLE
语句,它只是多了一个 TEMPORARY
或者 TEMP
关键字,以指示当前创建的表是一个临时表。
您可以为临时表使用一个和常规表相同的表名,但是在临时表存在期间,您不能访问常规表。
删除 PostgreSQL 临时表
要删除一个临时表,您可以使用 DROP TABLE
语句,如下:
DROP TABLE temp_table_name;
这与删除常规表完全一样。
或者,您可以通过退出会话让 PostgreSQL 自动删除临时表。
PostgreSQL 临时表实例
创建临时表的实例
以下语句创建了一个名为 test_temp 的临时表:
CREATE TEMP TABLE test_temp (
id SERIAL PRIMARY KEY,
notes VARCHAR
);
使用 \dt
命令查看数据库中的表:
\dt
List of relations
Schema | Name | Type | Owner
-----------+-------------------+-------+----------
pg_temp_4 | test_temp | table | postgres
public | test_serial | table | postgres
public | test_serial_big | table | postgres
public | test_serial_small | table | postgres
public | user_hobbies | table | postgres
public | users | table | postgres
(6 rows)
注意,临时表的 Schema 值是 pg_temp_4
,而常规表的 Schema 值是 public
。
创建与常规表同名的临时表的实例
在创建临时表 users
之前,我们先看以下常规表 users
的结构:
\d users
Table "public.users"
Column | Type | Collation | Nullable | Default
------------+-----------------------------+-----------+----------+---------
id | integer | | not null |
name | character varying(45) | | not null |
age | integer | | |
locked | boolean | | not null | false
created_at | timestamp without time zone | | not null |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "user_hobbies" CONSTRAINT "fk_user" FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE CASCADE
以下语句创建一个名称为 users
的临时表,为了区分,临时表 users
只由一个 id
列:
CREATE TEMP TABLE users (
id SERIAL PRIMARY KEY
);
使用 \dt
命令查看数据库中的表:
\dt
List of relations
Schema | Name | Type | Owner
-----------+-------------------+-------+----------
pg_temp_4 | test_temp | table | postgres
pg_temp_4 | users | table | postgres
public | test_serial | table | postgres
public | test_serial_big | table | postgres
public | test_serial_small | table | postgres
public | user_hobbies | table | postgres
(6 rows)
现在, 常规表 users
已经找不到了。
以下语句使用 \d
查看 users
的表结构:
\d users
Table "pg_temp_4.users"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
这里是临时表 users
的结构。
删除临时表 users
:
DROP TABLE users;
然后,再次使用 \dt
命令查看数据库中的表:
\dt
List of relations
Schema | Name | Type | Owner
-----------+-------------------+-------+----------
pg_temp_4 | test_temp | table | postgres
public | test_serial | table | postgres
public | test_serial_big | table | postgres
public | test_serial_small | table | postgres
public | user_hobbies | table | postgres
public | users | table | postgres
(6 rows)
临时表 users
不见了, 常规表 users
又出现在了上面的列表中。
结论
PostgreSQL 临时表是一种只在会话期间存在的特殊的表。在会话结束后, PostgreSQL 会自动删除临时表。