sql - 如何防止 PostgreSQL 更改我格式良好的 SQL 定义

标签 sql postgresql

我注意到,在为 PostgreSQL 编写 SQL 之后,当我稍后查看 SQL 定义时,数据库似乎改变了我格式化 SQL 的方式。例如,我的前导逗号被移到了后面,我的制表符被改变了,等等。

有什么办法可以避免这种情况吗?

最佳答案

这是误会。 Postgres 不会“改变格式”。原始 SQL 字符串根本不存储

查询被解析和重写,并根据查询的类型采取行动。 例如,当您创建 View 时,结果存储在系统目录中,主要是pg_classpg_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/

相关文章:

MySQL嵌套连接

SQL - 如何计算是和否项目

mysql - 将列类型从 int 或 bigint 更改为时间戳

sql - PostgreSQL : set timestamp to null

postgresql - 在 postgres 请求中添加内容类型?

sql - 替换 PostgresQL 中 '@' 之后的所有电子邮件地址

mysql - 合并两个查询的结果

mysql - 事务不适用于我的 MySQL 数据库

python - 在 Python 中执行 Postgresql 查询

sql - 如何在 SQL Server 中合并时间间隔