删除PostgreSQL中的临时表的示例

858 阅读4分钟

在这篇文章中,我们将学习如何删除PostgreSQL中的临时表。临时表是用来临时存储数据的。假设你想使用聚合和字符串函数对数据进行格式化或操作。因此,与其在基表中处理和格式化数据,不如从基表中填充数据并将其存储在一个临时表中。你可以处理和格式化存储在临时表中的数据。创建临时表和普通表的语法是一样的。你可以向临时表添加索引、约束、统计。在这篇文章中,我们将学习以下内容。

  1. 创建临时表的语法以及它与SQL Server临时表的区别
  2. 如何在临时表中插入数据
  3. 如何在存储过程中使用临时表
  4. 查看临时表
  5. 删除临时表

创建PostgreSQL临时表的语法

创建一个临时表的查询语法如下。

 create temporary table [TemptblName]
  (
  column_1 datatype ,
  column_2 datatype ,
  ...
  )

在语法上。

  1. 在CREATE关键字后指定TEMP或TEMPORARY关键字
  2. 在临时表的名称后面指定带有数据类型的列的列表

临时表是针对会话的表,在用户连接的执行范围内可以访问。为了理解这个概念,我打开了两个实例的 pSQL命令行工具的两个实例。名为tblSession1的临时表的第一个实例已经被创建。

查询。

postgres=# create temporary table Temp_tblSession(ID int);

屏幕截图

Create temp table

现在,让我们尝试从工具的第二个实例中访问tblSession1。 pSQL工具的第二个实例访问tblSession1。你将收到以下错误。

 postgres=# select * from Temp_tblSession;
  ERROR:  relation "temp_tblsession" does not exist
  LINE 1: select * from Temp_tblSession;

屏幕截图

Multiple session can not access the temp table

上面的情况说明,临时表只能由创建它们的会话访问。让我们看一些例子来了解临时表的使用。

创建临时表

我们想创建一个名为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")
  );

屏幕截图

Create temp table with primary key

正如你所看到的,该表已经被创建。

在一个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'; 

输出

Drop temp table: Select temp table into

一旦查询执行成功,运行下面的SELECT语句来查看tblNC17Movies中的数据。

select * from tblNC17Movies limit 20

输出

Drop temp table: View data from temp table

现在,让我们看看如何在一个存储过程中使用它们。

在一个函数中使用存储过程表

在这个例子中,我们将看到如何在PostgreSQL过程中使用临时表。该过程执行以下任务

  1. 创建一个名为tblFilm的临时表
  2. 在一个名为tblFilm 的表中插入评级为 R的电影数据。
  3. 删除名为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();

输出

Drop temp table: run stored procedure

正如你所看到的,该查询已经填充了一个具有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';

查询输出

Drop temp table: View temp tables

删除PostgreSQL中的临时表

删除临时表的语法如下

 DROP TABLE [TableName]

正如你在语法中看到的,你必须在DROP TABLE语句后指定表名。正如我提到的,临时表是针对会话的。它们可以由创建它的会话来删除。要删除tblStudent表,运行下面的查询。

  Drop table tblStudent;

SQL Server临时表和PostgreSQL临时表的区别

特点

PostgreSQL的临时表

SQL Server 临时表

定义

表名不需要任何前缀。

该名称必须有#或##作为表的前缀。

例子

  • #tblexample本地临时表
  • ##tblemaple全局临时表。

支持全局临时表

不支持

支持表变量

不支持

临时表和基础表的名称相同

不支持

储存位置

存放在pg_temp模式中

存储在TempDB数据库中

摘要

在这篇文章中,我们了解了PostgreSQL中的临时表。我们已经了解了以下几点。

  1. 创建临时表的语法以及它与SQL Server临时表的区别
  2. 如何在临时表中插入数据
  3. 如何在存储过程中使用临时表
  4. 查看临时表
  5. 删除临时表