【发布时间】:2017-08-17 22:24:49
【问题描述】:
我们的项目使用不同的模式来保持事物的有序性和安全性。我们GRANT 访问整个模式,而不是选择可能导致意外泄漏数据的单个组件。此外,如果我们可以从单个模式编写查询,这将使我们的生活更轻松,因为它有助于可维护性和减少错误。
例如,schema_foo 和 schema_bar 包含原始规范化数据(最终用户无法访问),schema_baz 包含从 schema_foo 和 schema_bar 返回数据的函数(最终用户可以访问)。当schema_foo 和schema_bar 中的数据需要在交付给最终用户之前进行处理时,这是有道理的;但是,在某些情况下不需要额外的处理。
在这种情况下,在schema_baz 中创建视图是否有意义,只需调用schema_foo 或schema_bar 中的表,如果是这样,两者之间的性能差异/副作用是什么
SELECT * FROM schema_foo.table_bin;
和
CREATE VIEW schema_baz.view_bin AS SELECT * FROM schema_foo.table_bin;
SELECT * schema_baz.view_bin;
如果这是可以接受的,那么(出于任何原因)按名称而不是 * 来识别每一列是否更好?
注意:生成的视图也将用于其他查询。我知道查询计划器很棒;但是,我担心 (ab) 仅出于使表可从另一个模式访问的目的而使用视图可能会产生意想不到的后果。
【问题讨论】:
标签: sql postgresql postgresql-9.6