将数据库从 Oracle 迁移到 PostgreSQL 时,我遇到了需要迁移到 PostgreSQL 的“全局临时表”。
文件说
可选地,可以在 TEMPORARY 或 TEMP 之前写入 GLOBAL 或 LOCAL。目前,这在 PostgreSQL 中没有区别,并且已弃用
CREATE EXTENSION pgtt;
错误:
SQL Error [0A000]: ERROR: extension "pgtt" is not available
Detail: Could not open extension control file "C:/Program
Files/PostgreSQL/17/share/extension/pgtt.control": No such file or directory.
Hint: The extension must first be installed on the system where PostgreSQL is running.
尝试 2:如何在 EDB Postgres 中将本地临时表用作全局临时表
PostgreSQL 中有多个数据库对象用于实现全局临时表功能。
UNLOGGED TABLE
CREATE VIEW
CREATE FUNCTION
CREATE TRIGGER
想法:担心这种方法的性能。
PostgreSQL 中的对应内容是什么?
没有。全局/本地区别与 PostgreSQL 中没有用处且不存在的 SQL 模块有关。引用文档:
不幸的是,
create extension
不支持包管理器 - 无论它可以加载什么,都必须与您的安装捆绑在一起或从外部添加。您需要先安装pgtt
并使其可供 Postgres 使用,然后才能使用 启用它create extension
。测试,只有当它真的拖累了事情时才继续担心。如果你缩小了你感兴趣的 GTT 功能子集,那么讨论哪种方法最合适会更容易。从表面上看,它
pgtt
旨在在 Postgres 中添加对 GTT 行为的完整模拟,可能消除了翻译/移植事物的需要。如果您只需要一个临时表,但由所有人共享,那就是
unlogged
。如果您需要每个人都有一个,但每个人只能看到自己的内容,那就是同样的事情,但使用RLS。您添加的越多,它就会变得越复杂,您就越接近pgtt
实际操作。unlogged+RLS 似乎是他们在上一个版本中所做的。