如何在PostgreSQL中为表创建同义词

4

我正在将这个 Oracle 命令迁移到 PostgreSQL:

CREATE SYNONYM &user..emp FOR &schema..emp;

请为我提供建议,如何迁移上述命令。

1
相关吗?:https://dev59.com/VKPia4cB1Zd3GeqP1qQ3 - Nick
设置 search_path 的方法:https://dev59.com/h2ox5IYBdhLWcg3wpV3F#9067777 - Erwin Brandstetter
2个回答

3
"最初的回答"
你不需要同义词。有两种方法:
  1. using the schema search path:

    ALTER DATABASE xyz SET search_path = schema1, schema2, ...;
    

    Put the schema that holds the table on the search_path of the database (or user), then it can be used without schema qualification.

  2. using a view:

    CREATE VIEW dest_schema.tab AS SELECT * FROM source_schema.tab;
    

如果在同一架构中有很多对象的同义词,第一种方法是不错的选择。

Original Answer翻译成"最初的回答"


授予username在schemaname模式下的CREATE和USAGE权限; 修改ROLE username的search_path为schemaname; - rashmi
我想为模式中的某些表创建同义词。如果我像上面那样做,它会为模式中的所有表创建同义词,对吗? - rashmi
那么我可以使用第二种方法(创建视图)对吗? - rashmi
第二种方法非常好。我不明白为什么Oracle首先创建了同义词... - Laurenz Albe

3

PostgreSQL不支持SYNOSYM或ALIAS。Synonym是由Microsoft SQL 2005实现的非SQL 2003功能(我认为)。虽然它提供了一个有趣的抽象,但由于缺乏关系完整性,它可能被视为一种风险。

也就是说,你可以创建一个同义词,向程序员宣传它,编写围绕它的代码,包括存储过程,然后某一天更改/删除等,这个同义词(或链接或指针)的后端导致运行时错误。我甚至觉得prepare也无法捕捉到这一点。

这与unix中的符号链接和C/C ++中的空指针是相同的陷阱。

但是最好创建一个DB视图,只要它仅包含一个表选择,它就已经可以更新。

CREATE VIEW schema_name.synonym_name AS SELECT * FROM schema_name.table_name;

1
自2001年以来,Oracle也支持此功能。如果一个功能在世界上排名前两位的数据库系统中存在了二十年,那么它很可能是一个好的功能。 - Nick
同义词的抽象表示一定存在风险(但不比重命名表格的风险更大),但这种风险使得抽象化成为可能。也就是说,在维护和推出新功能期间,您向开发人员提供了将同义词重新指向不同表格的选项。开发人员已经依赖同义词以实现更流畅的推出过程。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接