sql >> Databáze >  >> RDS >> PostgreSQL

Jak zabránit PostgreSQL ve změně mých pěkně naformátovaných definic SQL

To je nedorozumění. Postgres „nemění formát“. Původní řetězec SQL prostě není vůbec uložen .

Dotaz je analyzován a přepsán a v závislosti na druhu dotazu je provedena akce. Například , když vytvoříte zobrazení , výsledky jsou uloženy v systémových katalozích, většinou pg_class a pg_rewrite .

Musíte si také uvědomit, že všechny identifikátory jsou vyřešeny v době vytvoření databázového objektu, přičemž se bere aktuální search_path a viditelnost v úvahu (včasná vazba). Stejný řetězec dotazu může později znamenat něco jiného, ​​pokud se prostředí nějak změní.

To, co uvidíte později, je přepracováno verze vytvořená z těchto záznamů. Existují některé vestavěné funkce pomoci s tím, ale je do značné míry na klientovi, jak naformátovat reverzně vyvinutý kód SQL.

Funkce jsou výjimkou (částečně). Tělo funkce je předáno jako řetězec a uloženo tak jak je , přesně tak, jak bylo předáno, s (aktuálně) pouze povrchním testováním syntaxe a ověřováním objektů. Pokud chcete rychlý způsob, jak „uložit“ dotaz včetně jeho formátu v Postgresu, můžete použít například funkci PL/pgSQL.

Obecným přístupem je mít nezávislé úložiště kódu, jako je @Mike již navrhl - nebo se o formát příliš nestarat.



  1. SQL:Vyberte poslední záznam pro každý den s daným datem

  2. obnovení změněného zdroje odkazu db (brána Oracle na server SQL)

  3. Jaká je maximální velikost VARCHAR2 v PL/SQL a SQL?

  4. Jak vytvořit ID s AUTO_INCREMENT na Oracle?