是否有数据库范围的表别名?

时间:2018-11-13 10:19:44

标签: postgresql

我将基于Oracle数据库为PostgreSQL数据库建模。后者较旧,其表以3个字母的方案命名。

例如包含任务参数的表将命名为TSK_PAR

在为新数据库建模时,我想使用实际单词将这些表重命名为更具描述性的名称。我的问题是,该软件的某些部分可能依赖于这些旧名称,直到它们被重写并适应新方案为止。

是否可以创建用于整个数据库的别名之类的东西?

例如我创建了一个新的task_parameters数据库,但是向其中添加了一个TSK_PAR别名,因此如果使用SELECT * FROM TSK_PAR,它会自动引用新名称吗?

1 个答案:

答案 0 :(得分:3)

Postgres没有像Oracle这样的同义词。

但是对于您预期的用例,视图应该可以正常工作。仅执行select * from taks_parameters的视图就可以自动更新(有关在线示例,请参见here)。

如果您不想让所有这些视图都杂乱您的默认架构(通常为public),则可以在其他架构中创建它们,然后调整用户的search path使其包含“同义词模式”。

例如:

create schema synonyms;

create table public.task_parameters (
  id integer primary key, 
  ....
);

create view synonyms.task_par
as
select *
from public.task_parameters;

但是,这种方法有一个烦人的缺点:如果视图使用表,则表上允许的DDL语句受到限制,例如您不能删除列或对其重命名。

当我们使用Liquibase管理架构迁移时,我们总是在应用“常规”迁移之前先删除所有视图,然后在完成所有操作后,我们只需重新创建所有视图(通过运行存储在Git中的SQL脚本)即可。使用这种方法,ALTER TABLE语句永远不会失败,因为没有使用表的视图。由于创建视图的速度非常快,因此在部署迁移时不会增加开销。