Oracle和PG数据库临时表的差异,PG数据库如何删除临时表

现实的开发过程中使用 PG 数据库删除临时表发现如下报错,提示表 xxx 不存在:
在这里插入图片描述
问题原因: 调用删除语句,但是临时表不存在了。
解决方案: PG下用下面的方式来删除临时表或不进行删除(会话级临时表会自动删除,下面有详细解释)。

DROP TABLE IF EXISTS temp_table_name CASCADE;

代码解决示例:
在这里插入图片描述

Oracle 中的临时表

1. 全局临时表

- 在 Oracle 中,临时表分为全局临时表和本地临时表。
- 全局临时表是对所有用户可见的,数据在会话之间共享,但是会话结束后表中数据会被清除。
- 创建全局临时表时,使用 CREATE GLOBAL TEMPORARY TABLE 语句,并在表定义中指定 ON COMMIT PRESERVE ROWS ,以确保数据在事务提交之前不被清除。注: 如果把 PRESERVE 改成 DELETE 创建的全局临时表会在事务结束后被删除,也称为事物级全局临时表,我们一般使用的就是后者事物级全局临时表。

2. 本地临时表

- 本地临时表是对当前用户可见的,只能在创建该表的会话中使用,其他会话无法访问。
- 本地临时表的数据在会话结束后自动清除,不需要显式清除操作。

3. 表的生命周期

- 在 Oracle 中,全局临时表的生命周期是在会话结束时或者事务结束时,数据会被自动清除。
- 本地临时表的生命周期则是在会话结束时,数据会被自动清除。

4. 语法

- 创建全局临时表: CREATE GLOBAL TEMPORARY TABLE table_name (...) ON COMMIT PRESERVE ROWS;
- 创建本地临时表: CREATE [LOCAL] TEMPORARY TABLE table_name (...) ON COMMIT PRESERVE ROWS;

PostgreSQL 中的临时表

1. 会话临时表

- 在 PostgreSQL 中,临时表是会话级别的,即只对创建它的会话可见。
- 当会话结束时,临时表及其数据会被自动清除。

2. 表的生命周期

- 临时表的生命周期与会话的生命周期相同,当会话结束时,临时表会被自动删除。

3. 语法

- 创建临时表: CREATE TEMPORARY TABLE table_name (...)

4. 支持性

- PostgreSQL 中的临时表更符合 SQL 标准,不同于 Oracle 中的全局临时表和本地临时表的区别, PostgreSQL 中只有一种类型的临时表。

主要区别总结

  • 范围: Oracle 支持全局临时表和本地临时表,而 PostgreSQL 只支持会话临时表。
  • 语法: Oracle 需要在创建临时表时明确指定表的范围(全局或本地),而 PostgreSQL 的语法更简单,只需使用 CREATE TEMPORARY TABLE
  • 清除时机: Oracle 的全局临时表需要手动清除数据,而其他类型的临时表在会话结束时会自动清除; PostgreSQL 中的临时表在会话结束时会自动清除。

拓展1:PG 模拟全局临时表

PostgreSQL 中,你可以通过使用模式( Schema )和特定的权限控制,模拟出一种类似于全局临时表的行为。具体来说,你可以创建一个专门的模式用于存放临时表,然后对其他用户隐藏这个模式,以达到全局临时表的效果。

下面是一个简单的示例,演示了如何在 PostgreSQL 中创建类似全局临时表的行为:
① 创建一个专门的模式用于存放临时表

CREATE SCHEMA global_temp_tables;

② 创建一个临时表,并将其放置在 global_temp_tables 模式下

CREATE TABLE global_temp_tables.temp_table (
    id SERIAL PRIMARY KEY,
    name TEXT
);

③ 对其他用户隐藏 global_temp_tables 模式

REVOKE ALL ON SCHEMA global_temp_tables FROM PUBLIC;

通过以上步骤,其他用户将无法访问或修改 global_temp_tables 模式中的临时表。这样,你就可以在 PostgreSQL 中模拟出一种类似于全局临时表的行为。

需要注意的是,这种方法并不是严格意义上的全局临时表,因为临时表的生命周期仍然受到会话的影响,而不是全局的。然而,通过模式的隔离和权限控制,你可以实现一种在多个会话之间共享临时表的行为。

拓展2:oracle 删除不存在的临时表

Oracle 中,如果尝试删除一个不存在的临时表,不会导致错误。相反, DROP TABLE 语句会静默地返回并继续执行后续的 SQL 语句。这意味着即使尝试删除一个不存在的临时表,也不会产生任何异常或错误消息。 Oracle 中的 DROP TABLE 语句的行为是,如果表不存在,则返回一个 " Table or view does not exist " 信息,但不会中断执行流程。这种行为使得编写脚本时更加容易,不需要在删除表之前检查表是否存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/548478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性表的链式存储

文章目录 前言一、概念及特点二、链表术语及分类三、单链表1.特点2.C语言实现3.头结点作用4.基本操作的具体实现 总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材…

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错: Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

文献学习-37-动态场景中任意形状针的单目 3D 位姿估计:一种高效的视觉学习和几何建模方法

On the Monocular 3D Pose Estimation for Arbitrary Shaped Needle in Dynamic Scenes: An Efficient Visual Learning and Geometry Modeling Approach Authors: Bin Li,† , Student Member, IEEE, Bo Lu,† , Member, IEEE, Hongbin Lin, Yaxiang Wang, Fangxun Zhong, Me…

使用arthas查看java项目resources目录下面的文件内容

有一次在测试环境想看resources下面的mapper文件内容(代码执行和预期不一致,所以想排查一下是不是打上去的包有问题,没有通过下载jar的方式解压查看),然后想到了使用arthas来弄,这里记录一下怎么个查看法。…

【Textin.com】智能文档处理系列 - 电子文档解析技术全格式解析

一、引言 在当今的数字化时代,电子文档已成为信息存储和交流的基石。从简单的文本文件到复杂的演示文档,各种格式的电子文档承载着丰富的知识与信息,支撑着教育、科研、商业和日常生活的各个方面。随着信息量的爆炸性增长,如何高效…

listpack

目录 为什么有listpack? listpack结构 listpack的节点entry 长度length encoding编码方式 listpack的API 1.创建listpack 2.遍历操作 正向遍历 反向遍历 3.查找元素 4.插入/替换/删除元素 总结 为什么有listpack? ziplist是存储在连续内存空间,节省…

Spring Boot 2.x 将 logback 1.2.x 升级至 1.3.x

场景 安全部门针对代码进行漏洞扫描时,发现 logback-core 和 logback-classic 都属于 1.2.x 版本,这个版本存在 CVE 漏洞,并且建议升级到 1.3.x 版本。 问题 将两个包直接升级到 1.3.x 版本时,Spring Boot Web 服务启动直接出现…

基于Springboot+Vue+mysql仓库管理系统仓库进销存管理系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

nfs服务器详解

nfs(网络文件系统)---------- 其实就是通过网络将文件共享出去。 通过TCP/IP网络去共享资源的。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 客户端和服务端需要去读写共…

五分钟搞定什么是系统的平均负载

平均负载定义 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,和CPU使用率没有直接关系。简单理解就是平均负载其实就是平均活跃进程数。 使用uptime命令查看系统平均负载 在linux中&#xf…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

Qt实现XYModem协议(一)

1 概述 Kermit文件运输协议提供了一条从大型计算机下载文件到微机的途径。它已被用于进行公用数据传输。 其特性如下: Kermit文件运输协议是一个半双工的通信协议。它支持7位ASCII字符。数据以可多达96字节长度的可变长度的分组形式传输。对每个被传送分组需要一个确认。Kerm…

如何利用纯前端技术,实现一个网页版视频编辑器?

纯网页版视频编辑器 一、前言二、功能实现三、所需技术四、部分功能实现4.1 素材预设4.2 多轨道剪辑 一、前言 介绍:本篇文章打算利用纯前端的技术,来实现一个网页版的视频编辑器。为什么突然想做一个这么项目来呢,主要是最近一直在利用手机…

KITTI结果领先地位!Progressive LiDAR Adaptation for Road Detection——PLARD算法

描述 详解一篇基于激光视觉融合的道路检测文章,发表在2019年自动化学报英文版(我所主编的业界顶刊)中,第三作者是陶大程,业界大佬,可自行进行百度。 为什么选择这篇文章进行分析呢。查看KITTI数据集的分数…

分布式数据库Polardb-X架构及特点

PolarDB-X架构 计算节点(Compute Node,CN)是系统的入口,采用无状态设计的sql引擎提供分布式路由和计算,包括SQL解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务2PC协调…

CFDPro雾化仿真 | 专为雾化过程与液滴属性研究设计的仿真模块

雾化是一种将液体转化为微小液滴的技术,通过不同的雾化方法实现液体的高效分散、蒸发、燃烧、吸附或沉积等目的。 雾化仿真在多个工业领域中具有极其重要的地位。无论是内燃机中燃油的高效燃烧,还是化工生产中的喷雾干燥,以及农业喷雾中农药…

[linux]进程控制——进程终止

一、main函数的返回值 我们在编写C语言的程序时,通常会这样写: int main() {return 0; } 那么我们为什么要返回(return)0 呢? 其实,main函数也是一个函数,它也会被调用,所以谁调…

【力扣 Hot100 | 第四天】4.15(括号生成)

文章目录 4.括号生成4.1题目4.2解法:回溯4.2.1回溯思路(1)函数返回值以及参数(2)终止条件(3)遍历过程 4.2.2代码 4.括号生成 4.1题目 数字 n 代表生成括号的对数,请你设计一个函数…

计算机笔记(11)续20个

180.时钟频率2.0GHz表示一秒有2*10的9次方个时钟周期,若执行一条指令需要2个时钟周期,则每秒执行的指令数为2*10的9次方/21*10的9次方 181.同轴电缆粗缆采用AUI头作为连接器件 182. 183.win7中的回收站,存放的是硬盘上被删除的…

C语言:文件操作(三)

目录 前言 5、文章的随机读写 5.1 fseek 5.2 ftell 5.3 rewind 结语 前言 本篇文章继续讲解文件操作,讲解文件的随机读写,主要有三个函数:fseek;ftell;rewind。 前面讲解的函数都是对文件内容进行顺序读写&#x…
最新文章