How are the SELECT queries reconstructed in pg_views

From: Julius de Bruijn <bruijn(at)prisma(dot)io>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: How are the SELECT queries reconstructed in pg_views
Date: 2023-03-28 13:43:07
Message-ID: 25b7f08f-1a5d-669a-1678-9def044df0bf@prisma.io
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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?

Thank you!

Julius de Bruijn
Software Engineer
https://www.prisma.io/

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Dominique Devienne 2023-03-28 13:55:59 Re: Plans for ON DELETE CASCADE? Which index is used, if at all?
Previous Message Tom Lane 2023-03-28 13:23:31 Re: Plans for ON DELETE CASCADE? Which index is used, if at all?