在这篇文章中,我们将学习如何删除PostgreSQL中的临时表。临时表是用来临时存储数据的。假设你想使用聚合和字符串函数对数据进行格式化或操作。因此,与其在基表中处理和格式化数据,不如从基表中填充数据并将其存储在一个临时表中。你可以处理和格式化存储在临时表中的数据。创建临时表和普通表的语法是一样的。你可以向临时表添加索引、约束、统计。在这篇文章中,我们将学习以下内容。
- 创建临时表的语法以及它与SQL Server临时表的区别
- 如何在临时表中插入数据
- 如何在存储过程中使用临时表
- 查看临时表
- 删除临时表
创建PostgreSQL临时表的语法
创建一个临时表的查询语法如下。
create temporary table [TemptblName]
(
column_1 datatype ,
column_2 datatype ,
...
)
在语法上。
- 在CREATE关键字后指定TEMP或TEMPORARY关键字
- 在临时表的名称后面指定带有数据类型的列的列表
临时表是针对会话的表,在用户连接的执行范围内可以访问。为了理解这个概念,我打开了两个实例的 pSQL命令行工具的两个实例。名为tblSession1的临时表的第一个实例已经被创建。
查询。
postgres=# create temporary table Temp_tblSession(ID int);
屏幕截图

现在,让我们尝试从工具的第二个实例中访问tblSession1。 pSQL工具的第二个实例访问tblSession1。你将收到以下错误。
postgres=# select * from Temp_tblSession;
ERROR: relation "temp_tblsession" does not exist
LINE 1: select * from Temp_tblSession;
屏幕截图

上面的情况说明,临时表只能由创建它们的会话访问。让我们看一些例子来了解临时表的使用。
创建临时表
我们想创建一个名为tblStudent的临时表。创建表的查询如下。
create temporary table tblStudent
(
Student_id int,
Student_name varchar(500),
student_grade char(1),
School_ID int
)
创建一个带有索引和约束的临时表
我们想创建一个名为tblSchool的表。该表必须有主键和一个非群集索引。为了保持数据的完整性,我们添加了一个NOT NULL约束。
CREATE TEMPORARY TABLE "tblMovies"
(
"MovieTitle" character varying(500),
description character varying(5000) NOT NULL,
"Release_year" integer,
duration integer,
movie_length integer,
rating varchar(5),
PRIMARY KEY ("MovieTitle")
);
屏幕截图

正如你所看到的,该表已经被创建。
在一个SQL查询中使用一个临时表
在这个例子中,我们将看到如何在脚本中插入PostgreSQL临时表的数据。我想把有NC-17等级的电影列表复制到名为 tblNC17Movies.要做到这一点,我们要使用SELECT * INTO TEMP TABLE。
查询
SELECT title,
description,
release_year,
rental_rate,
rental_duration,
length
INTO TEMP TABLE tblnc17movies
FROM film
WHERE rating = 'NC-17';
输出

一旦查询执行成功,运行下面的SELECT语句来查看tblNC17Movies中的数据。
select * from tblNC17Movies limit 20
输出

现在,让我们看看如何在一个存储过程中使用它们。
在一个函数中使用存储过程表
在这个例子中,我们将看到如何在PostgreSQL过程中使用临时表。该过程执行以下任务
- 创建一个名为tblFilm的临时表
- 在一个名为tblFilm 的表中插入评级为 R的电影数据。
- 删除名为tblFilm的临时表
以下是存储过程的代码。
CREATE OR REPLACE PROCEDURE sp_get_movies()
LANGUAGE plpgsql
AS $procedure$
BEGIN
CREATE TEMPORARY TABLE "tblfilm"
(
MovieTitle character varying(500),
duration integer,
movie_length integer,
rating varchar(5)
);
insert into tblfilm (MovieTitle,duration,movie_length,rating)
select title, rental_duration, length,rating from film where rating='R';
select * from tblFilm;
drop table tblFilm;
END;
$procedure$
一旦存储过程被创建,运行下面的命令来执行存储过程;该存储过程将填充具有R等级的电影列表。
CALL sp_get_movies();
输出

正如你所看到的,该查询已经填充了一个具有R等级的电影列表。
查看PostgreSQL的临时表
这些临时表是在 pg_temp的模式中创建的。要查看这些临时表,请运行以下查询。
SELECT table_catalog,
table_schema,
table_name,
table_type,
FROM information_schema.tables
WHERE table_catalog = 'DVDShop'
AND table_type = 'LOCAL TEMPORARY';
查询输出

删除PostgreSQL中的临时表
删除临时表的语法如下
DROP TABLE [TableName]
正如你在语法中看到的,你必须在DROP TABLE语句后指定表名。正如我提到的,临时表是针对会话的。它们可以由创建它的会话来删除。要删除tblStudent表,运行下面的查询。
Drop table tblStudent;
SQL Server临时表和PostgreSQL临时表的区别
特点 | PostgreSQL的临时表 | SQL Server 临时表 |
定义 | 表名不需要任何前缀。 | 该名称必须有#或##作为表的前缀。 例子
|
支持全局临时表 | 不支持 | 是 |
支持表变量 | 不支持 | 有 |
临时表和基础表的名称相同 | 是 | 不支持 |
储存位置 | 存放在pg_temp模式中 | 存储在TempDB数据库中 |
摘要
在这篇文章中,我们了解了PostgreSQL中的临时表。我们已经了解了以下几点。
- 创建临时表的语法以及它与SQL Server临时表的区别
- 如何在临时表中插入数据
- 如何在存储过程中使用临时表
- 查看临时表
- 删除临时表