我将基于Oracle数据库为PostgreSQL数据库建模。后者较旧,其表以3个字母的方案命名。
例如包含任务参数的表将命名为TSK_PAR
。
在为新数据库建模时,我想使用实际单词将这些表重命名为更具描述性的名称。我的问题是,该软件的某些部分可能依赖于这些旧名称,直到它们被重写并适应新方案为止。
是否可以创建用于整个数据库的别名之类的东西?
例如我创建了一个新的task_parameters
数据库,但是向其中添加了一个TSK_PAR
别名,因此如果使用SELECT * FROM TSK_PAR
,它会自动引用新名称吗?
答案 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语句永远不会失败,因为没有使用表的视图。由于创建视图的速度非常快,因此在部署迁移时不会增加开销。