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.rhkb.cn/news/311117.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt for Android 开发环境

在搭建环境时开始感觉还挺顺利的,从 Qt 配置的环境里面看并没有什么问题,可真正编译程序的时候发现全是错误。 最开始的时候安装了 JDK21 最新版本,然后根据 JDK21 安装 ndk, build-tools, Platform-Tools 和 Gradle,但是不管这么…

探索AD域控的安全性:ADAudit Plus的角色

在当今数字化时代,企业对于信息安全的需求越来越迫切。作为企业基础设施中的核心组成部分之一,Active Directory(AD)域控制器的安全性显得尤为重要。为了满足企业对AD安全性管理的需求,ADAudit Plus作为一款强大的解决…

element-ui的按需引入报错解决:MoudleBuildFailed,完整引入和按需引入

官网: Element - The worlds most popular Vue UI framework 1.完整引入 (1)下载: npm i element-ui -S (2)引入: 在 main.js 中写入以下内容: import Vue from vue; impor…

[C++初阶]类和对象(一)

1.面向过程和面向对象的区分 我们之前都是用C语言写的代码,我们知道C语言是一个面向过程的语言,但是现在我们学的时C,我们都知道C是一种面向对象的语言,那么什么叫面向过程?什么叫面向对象呢? 这里我们来举个例子: 比如我们是开饭店的,客人点了一道菜&#xff0c…

RocketMQ 02 功能大纲介绍

RocketMQ 02 主流的MQ有很多,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。 之前阿里巴巴也是使用ActiveMQ,随着业务发展,ActiveMQ IO 模块出现瓶颈,后来阿里巴巴 通过一系列优化但是还是不能很好的解决,之后…

怎么进入抖音企业号管理页面?抖音企业号后台管理入口

抖音企业号上线于2018年6月,截止2020年,开通抖音企业号的企业数超过500万。抖音企业号,是企业商户在抖音平台上的经营阵地,能够帮助企业面向抖音用户“打品牌,找客户,做推广,带销量”&#xff0…

流媒体服务器的应用场景

流媒体服务器的应用场景 流媒体常用协议 RTSP 不适合手机和浏览器端 RTMP 比较适合手机和浏览器端直播 HLS 延迟比较高,适合点播

【JAVA基础篇教学】第八篇:Java中List详解说明

博主打算从0-1讲解下java基础教学,今天教学第八篇:Java中List详解说明。 在 Java 编程中,List 接口是一个非常常用的集合接口,它代表了一个有序的集合,可以包含重复的元素。List 接口提供了一系列操作方法,…

ClickHouse--16--普通函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、日期函数1、时间或日期截取函数(返回非日期)2、时间或日期截取函数(返回日期)3、日期或时间日期生成函数 二、类…

纯css实现左右拖拽改变盒子大小

效果&#xff1a; 代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"><title></title><style>body {background-color: black;color: white;}.column {ove…

Python 物联网入门指南(四)

原文&#xff1a;zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;构建光学字符识别的神经网络模块 本章介绍以下主题&#xff1a; 使用光学字符识别&#xff08;OCR&#xff09;系统 使…

【项目实战】记录一次PG数据库迁移至GaussDB测试(上)

目录 一、说明 1.1、参考文档 1.2、注意事项 1.3、环境基本情况 二、GaussDB新环境安装 2.1 配置操作环境变量 2.1.1 关闭防火墙 步骤1 执行以下命令&#xff0c;检查防火墙是否关闭。 步骤2 执行以下命令&#xff0c;关闭防火墙并禁止开机启动。 步骤3 修改/etc/sel…

根据后端获取到的文档流,下载打开显示“无法打开文件”

原代码&#xff1a; download(item) {this.axios.get(api.download/item.name).then(res > {// console.log(res)let bob new Blob([res.data],{type: application/vnd.ms-excel})const link document.createElement(a);let url window.URL.createObjectURL(bob);link.d…

attention and tell论文【无标题】

这个公式使用LaTeX语法表示为&#xff1a; ( i t f t o t c t ) ( σ σ σ tanh ⁡ ) T D m n , n ( E y t − 1 h t − 1 x t ) \begin{pmatrix}i_t \\f_t \\o_t \\c_t\end{pmatrix} \begin{pmatrix}\sigma \\\sigma \\\sigma \\\tanh\end{pmatrix}T_{Dmn,n}\begin{pmatri…

php未能在vscode识别?

在设置里搜php&#xff0c;找到settings.json&#xff0c;设置你的安装路径即可。 成功

性能测试汇总一

目录 性能测试流程​编辑性能相关概念 什么是新能测试 性能测试思维 性能测试环境要求 负载测试 压力测试 可靠性测试 稳定性测试 压力测试 容量测试 性能指标 并发用户数 响应时间 TPS 吞吐量 吞吐率 QPS 性能测试流程 测试准备 性能测试环境搭建 性能测试…

光场相机建模与畸变校正改进方法

摘要&#xff1a;光场相机作为一种新型的成像系统&#xff0c;可以直接从一次曝光的图像中得到三维信息。为了能够更充分有效地利用光场数据包含的角度和位置信息&#xff0c;完成更加精准的场景深度计算&#xff0c;从而提升光场相机的三维重建的精度&#xff0c;需要实现精确…

Scrapy框架 进阶

Scrapy框架基础Scrapy框架进阶 【五】持久化存储 命令行&#xff1a;json、csv等管道&#xff1a;什么数据类型都可以 【1】命令行简单存储 &#xff08;1&#xff09;语法 Json格式 scrapy crawl 自定义爬虫程序文件名 -o 文件名.jsonCSV格式 scrapy crawl 自定义爬虫程…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…