云数据库 GaussDB-CREATE SYNONYM:注意事项
注意事项
- 创建同义词的用户将成为其所有者。
- 若指定模式名称,则同义词在指定模式中创建。否则,在当前模式下创建。
- 支持通过同义词访问的数据库对象包括:表、视图、类型、包、函数和存储过程、序列和其他同义词对象。
- 使用同义词时,用户需要具有对关联对象的相应权限。
- 支持使用同义词的DML语句包括:SELECT、INSERT、UPDATE、DELETE、EXPLAIN、CALL。
- 不支持关联函数或存储过程的CREATE SYNONYM语句出现在存储过程中,建议存储过程中使用系统表pg_synonym中已存在的同义词对象。
- 不建议对临时表创建同义词。如果需要创建,需要指定同义词的目标临时表的模式名,否则无法正常使用该同义词,并且在当前会话结束前执行DROP SYNONYM命令。
- 删除原对象后,与之关联同义词不会被级联删除,继续访问该同义词将会报错,对于访问表提示已失效,对于访问函数、存储过程、包等会提示对象不存在。
- 被授予了CREATE ANY SYNONYM权限的用户能够在用户模式下创建同义词。
- 不支持针对包含加密列的密态表及基于密态表的视图、函数、存储过程创建同义词。
- 同义词关联的对象可以是PACKAGE,不支持同义词关联PACKAGE下的函数。可以通过PACKAGE关联的同义词,来访问PACKAGE下的函数和变量。
- 同义词的SCHEMA是用户所在SCHEMA时,该同义词OWNER为SCHEMA的OWNER,其他场景同义词OWNER默认为同义词的创建者。
- 设置SEARCH_PATH,未指定同义词SCHEMA情况下,存储过程和函数会优先按照名称检索PG_PROC表,在没有同名函数时,检索同义词,最后按照SEARCH_PATH检索;其他对象优先检索SEARCH_PATH,同SCHEMA下,本名的对象优先于同义词被访问。
- 不支持通过DDL语句CREATE、DROP、ALTER操作同义词的方式访问同义词所关联的对象。
- 支持嵌套同义词。搜索同义词时,如果同义词关联的是另一个同义词,则会继续搜索关联的同义词,直到搜索到最后关联的对象。
- 不支持使用\d、\df、\sf等方式通过同义词访问关联对象的信息。
- 同义词的搜索过程:
- SQL语句给定SCHEMA搜索对象SCHEMA1.OBJECT1:
搜索SCHEMA1.OBJECT1对象是否存在;该对象不存在时,搜索同义词SCHEMA1.OBJECT1是否存在;SCHEMA1.OBJECT1同义词存在,搜索同义词关联的对象SCHEMA2.OBJECT2,只有对象SCHEMA2.OBJECT2和同义词SCHEMA2.OBJECT2都不存在,且SCHEMA2是用户名时,会额外搜索PUBLIC同义词OBJECT2。
- SQL语句不给定SCHEMA搜索对象OBJECT1:
遍历SEARCH_PATH,查找指定SCHEMA下的对象SCHEMA.OBJECT1,对象SCHEMA.OBJECT1不存在则搜索同义词SCHEMA.OBJECT1,同义词SCHEMA.OBJECT1不存在且搜索的SCHEMA是用户名时,会额外搜索PUBLIC同义词OBJECT1。
- SQL语句给定SCHEMA搜索对象SCHEMA1.OBJECT1: