Dat is een misverstand. Postgres "wijzigt het formaat niet". De originele SQL-string wordt gewoon helemaal niet opgeslagen .
De query wordt ontleed en herschreven en afhankelijk van het soort query wordt actie ondernomen. Bijvoorbeeld , wanneer u een weergave . maakt , worden de resultaten opgeslagen in systeemcatalogi, meestal pg_class
en pg_rewrite
.
U moet zich er ook van bewust zijn dat alle id's worden opgelost tijdens het maken van een databaseobject, waarbij de huidige search_path
en zichtbaarheid in aanmerking (early binding). Dezelfde queryreeks kan later iets anders betekenen, als de omgeving op enigerlei wijze verandert.
Wat je later ziet, is een opnieuw ontworpen versie gebouwd op basis van deze items. Er zijn enkele ingebouwde functies om daarbij te helpen, maar het is grotendeels aan de klant hoe reverse-engineering SQL-code moet worden geformatteerd.
Functies zijn (deels) een uitzondering. De hoofdtekst van de functie wordt doorgegeven als string en opgeslagen zoals het is , precies zoals doorgegeven, met (momenteel) alleen oppervlakkige syntaxistests en validatie van objecten. Als u een snelle manier wilt om een query, inclusief het formaat ervan, in Postgres te "opslaan", kunt u bijvoorbeeld een PL/pgSQL-functie gebruiken.
De algemene benadering is om een onafhankelijke coderepository te hebben zoals @Mike al voorgesteld - of niet te veel om het formaat te geven.