我注意到,在为 PostgreSQL 编写 SQL 之后,当我稍后查看 SQL 定义时,数据库似乎改变了我格式化 SQL 的方式。例如,我的前导逗号被移到了后面,我的制表符被改变了,等等。
有什么办法可以避免这种情况吗?
最佳答案
这是误会。 Postgres 不会“改变格式”。原始 SQL 字符串根本不存储。
查询被解析和重写,并根据查询的类型采取行动。 例如,当您创建 View 时,结果存储在系统目录中,主要是pg_class
和 pg_rewrite
.
您还必须知道,所有标识符都是在创建数据库对象时解析的,采用当前的 search_path
和可见性考虑(早期绑定(bind))。如果环境以任何方式发生变化,相同的查询字符串以后可能意味着不同的东西。
您稍后看到的是根据这些条目构建的重新设计版本。 有一些built-in functions对此有所帮助,但这在很大程度上取决于客户如何格式化逆向工程的 SQL 代码。
Functions是一个异常(exception)(部分)。函数主体作为字符串传递并保存原样,完全按照传递的方式进行,(目前)仅对对象进行表面语法测试和验证。例如,如果你想要一种快速的方法来“保存”查询,包括它在 Postgres 中的格式,你可以使用 PL/pgSQL 函数。
一般的做法是有一个独立的代码库,比如@Mike already suggested - 或者不要太在意格式。
关于sql - 如何防止 PostgreSQL 更改我格式良好的 SQL 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358072/