Lbe*_*ben 10 postgresql postgresql-9.3 pg-dump
我正在使用 PostgreSQL 9.3pg_dump
工具仅使用以下方法提取公共模式定义:
pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql
Run Code Online (Sandbox Code Playgroud)
但是当我检查时schema.sql
,我们的一个观点出现在CREATE TABLE
声明中而不是CREATE VIEW
声明中。
但是,如果我pg_dump
使用以下特定视图:
pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql
Run Code Online (Sandbox Code Playgroud)
然后schema.sql
包含实际的视图定义。
那么,为什么会发生这种情况?谢谢你们!
Max*_*phy 12
在内部,视图只是一个带有规则的表,所以这是有道理的。
请参阅此处:https : //postgresql.org/docs/9.5/static/rules-views.html
PostgreSQL 中的视图是使用规则系统实现的。实际上,两者之间本质上没有区别:
Run Code Online (Sandbox Code Playgroud)CREATE VIEW myview AS SELECT * FROM mytab;
与两个命令进行比较:
Run Code Online (Sandbox Code Playgroud)CREATE TABLE myview (same column list as mytab); CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD SELECT * FROM mytab;
因为这正是
CREATE VIEW
命令在内部所做的。这有一些副作用。其中之一是 PostgreSQL 系统目录中视图的信息与表的信息完全相同。所以对于解析器来说,表和视图之间绝对没有区别。它们是同一个东西:关系。
归档时间: |
|
查看次数: |
9672 次 |
最近记录: |