PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich verhindern, dass PostgreSQL meine schön formatierten SQL-Definitionen ändert?

Das ist ein Missverständnis. Postgres "ändert das Format nicht". Der ursprüngliche SQL-String wird überhaupt nicht gespeichert .

Die Abfrage wird analysiert und neu geschrieben, und je nach Art der Abfrage werden Maßnahmen ergriffen. Zum Beispiel , wenn Sie Ansicht erstellen , werden die Ergebnisse in Systemkatalogen gespeichert, meistens pg_class und pg_rewrite .

Sie müssen sich auch bewusst sein, dass alle Bezeichner zum Zeitpunkt der Erstellung eines Datenbankobjekts aufgelöst werden, wobei der aktuelle search_path und Sichtbarkeit berücksichtigt (Early Binding). Die gleiche Abfragezeichenfolge kann später etwas anderes bedeuten, wenn sich die Umgebung in irgendeiner Weise ändert.

Was Sie später sehen, ist ein re-engineered Version, die aus diesen Einträgen erstellt wurde. Es gibt einige eingebaute Funktionen um dabei zu helfen, aber es liegt weitgehend beim Kunden, wie er zurückentwickelten SQL-Code formatiert.

Funktionen sind (teilweise) eine Ausnahme. Der Funktionsrumpf wird als String übergeben und wie er ist gespeichert , genau wie bestanden, mit (derzeit) nur oberflächlicher Syntaxprüfung und Validierung von Objekten. Wenn Sie eine Abfrage einschließlich ihres Formats schnell in Postgres "speichern" möchten, können Sie beispielsweise eine PL/pgSQL-Funktion verwenden.

Der allgemeine Ansatz besteht darin, ein unabhängiges Code-Repository wie @Mike bereits vorgeschlagen zu haben - oder sich nicht zu sehr um das Format zu kümmern.