From: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
---|---|
To: | Julius de Bruijn <bruijn(at)prisma(dot)io>, pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: How are the SELECT queries reconstructed in pg_views |
Date: | 2023-03-28 20:23:40 |
Message-ID: | 73b0f3b2-819d-4cb3-6101-cd02c033da5e@aklaver.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 3/28/23 06:43, Julius de Bruijn wrote:
> Hi,
>
> We at Prisma are implementing developer tooling for PostgreSQL
> database amongst the others. One part of our tooling is the migration
> of schema changes to the database. We do that by diffing the schema
> from the file system against the one we introspect from the database;
> storing the changes to a migration file.
>
> We are right now extending this to cover database views, and right now
> I'm looking for ways to compare the SQL written by the user against
> the SQL definition found in the pg_views view in the database.
>
> We do have a good SQL parser, which makes minor differences such as
> whitespace or newlines not matter in the comparison. What makes things
> more difficult is how PostgreSQL reconstructs the SELECT query before
> storing it to the database, as is written in the documentation:
>
> https://www.postgresql.org/docs/current/view-pg-views.html
>
> I haven't been able to find exactly what changes PostgreSQL does when
> reconstructing the query, but I've successfully been able to create
> views where the resulting query differs from what I wrote. Is there
> any documentation for this feature where I can learn more about what
> happens before the query is stringified to the information schema? Or,
> even better, is there a way for me to send a query to the database and
> as a result get back a reconstructed query?
SELECT pg_catalog.pg_get_viewdef('61822'::pg_catalog.oid, true);
pg_get_viewdef
--------------------------------
SELECT up_test.id AS up_id, +
up_test.col_1 AS bool_col,+
up_test.col_2 AS col2 +
FROM up_test;
Find pg_get_viewdef here:
https://www.postgresql.org/docs/current/functions-info.html
Source here:
~/src/backend/utils/adt/ruleutils.c
>
> Thank you!
>
> Julius de Bruijn
> Software Engineer
> https://www.prisma.io/
>
>
>
--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2023-03-28 20:26:17 | Re: How are the SELECT queries reconstructed in pg_views |
Previous Message | Kirk Wolak | 2023-03-28 18:24:44 | Re: Using CTID system column as a "temporary" primary key |