View 从POSTGRESQL数据库获取原始视图定义

View 从POSTGRESQL数据库获取原始视图定义,view,postgresql-9.5,View,Postgresql 9.5,我创建了一个具有以下定义的视图: CREATE TABLE t1(id int,name varchar); INSERT INTO t1 values(1,'n1'),(2,'n2'); CREATE VIEW v2 AS SELECT * FROM t1 WHERE name = 'n1'; 但当我在pg_views表中检查postgresql DB(9.5)中的定义时,它被以下方式修改: postgres=# select * from pg_views where schemaname

我创建了一个具有以下定义的视图:

CREATE TABLE t1(id int,name varchar);
INSERT INTO t1 values(1,'n1'),(2,'n2');
CREATE VIEW v2 AS SELECT * FROM t1 WHERE name = 'n1';
但当我在pg_views表中检查postgresql DB(9.5)中的定义时,它被以下方式修改:

postgres=# select * from pg_views where schemaname = 'sc1' and viewname = 'v2';
     schemaname | viewname | viewowner |               definition
    ------------+----------+-----------+-----------------------------------------
     sc1        | v2       | postgres  |  SELECT t1.id,                         +
                |          |           |     t1.name                            +
                |          |           |    FROM sc1.t1                         +
                |          |           |   WHERE ((t1.name)::text = 'n1'::text);
    (1 row)
我可以在columnname之前添加tablename,但我不需要额外的“::text”部分。
是否有任何方法可以实现这一点(就像我可以查询任何其他系统表以获取原始定义一样)

您可以而不是从Postgres系统表获取“原始”视图定义

Postgres仅存储解析后的版本

您可以从Postgres系统表中获取“原始”视图定义

Postgres仅存储解析后的版本

只需将源代码从版本控制系统中取出即可。@a_horse_,没有名称,您的意思是获取postgresql的源代码并进行修改吗?你能详细说明一下吗?不,我是说你的源代码。您的版本控制系统中应该有原始的CREATE VIEW语句。是的,在我们的源代码中,我们对CREATE VIEW语句的select查询有一些解析规则,其中“::text”是不允许的,我不想更改这些现有语句,因为它可能会中断其他查询。因此,我的发现中有两个选项:1.从postgres获取原始定义2.修改从postgresql获取的定义。仅供参考:我们不会将定义存储在我们的中,我们只是使用jdbc连接从postgresql本身获取这些信息。“从postgres获取原始定义”是不可能的,当您创建视图时,它由postgres解析,只存储解析的版本。您必须从您的版本控制系统(git、subversion等)获取它。不在版本控制系统中管理您的代码是一个非常非常糟糕的主意(这只是一个说明为什么这是一个糟糕主意的例子),只需将源代码从您的版本控制系统中删除即可。@a_horse_没有名字,您的意思是获取postgresql的源代码并进行修改吗?你能详细说明一下吗?不,我是说你的源代码。您的版本控制系统中应该有原始的CREATE VIEW语句。是的,在我们的源代码中,我们对CREATE VIEW语句的select查询有一些解析规则,其中“::text”是不允许的,我不想更改这些现有语句,因为它可能会中断其他查询。因此,我的发现中有两个选项:1.从postgres获取原始定义2.修改从postgresql获取的定义。仅供参考:我们不会将定义存储在我们的中,我们只是使用jdbc连接从postgresql本身获取这些信息。“从postgres获取原始定义”是不可能的,当您创建视图时,它由postgres解析,只存储解析的版本。您必须从您的版本控制系统(git、subversion等)获取它。不在版本控制系统中管理代码是一个非常非常糟糕的想法(这只是一个说明为什么这是一个糟糕想法的示例)