Thread: Get original view definition without modification

Get original view definition without modification

From
PG Doc comments form
Date:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/9.5/rules-views.html
Description:

I am looking a way to get exact view definition, for ex :

    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';
    
    But when i checked the definition in postgresql DB(9.5) in pg_views
table, it is getting modified in the below way :
    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);
I am fine with adding tablename before columnname but i don't want the extra
'::text' part. Is there anyway to achieve this(like any other system table i
can query from to get original definition)

Re: Get original view definition without modification

From
Tom Lane
Date:
PG Doc comments form <noreply@postgresql.org> writes:
> I am looking a way to get exact view definition, for ex :
> ...
> I am fine with adding tablename before columnname but i don't want the extra
> '::text' part. Is there anyway to achieve this(like any other system table i
> can query from to get original definition)

No, Postgres only saves a "compiled" form of a view.  Storing the original
text would have its own pitfalls, eg what if you rename a table or column
mentioned in the view?  (Also, the SQL standard has some requirements that
would be difficult to meet otherwise.)

If you really want the original text, best bet is to keep your schema
creation commands in a VCS or the like, outside the database.

            regards, tom lane