postgresql - 一个 sql 脚本是只被 PostgreSQL 服务器接受,还是被服务器和客户端 psql 接受?

标签 postgresql psql sql-scripts

sql 脚本是仅可由 RDBMS(如 PostgreSQL 服务器)解释,还是可由服务器和客户端(如 psql)解释?服务器可以接受 SQL 脚本文件,还是只有客户端可以?

我的问题来自于了解到在 psql 中,\i 可用于读取和执行 sql 脚本。但是,如果 Postgresql 服务器可以接受一个 sql 脚本,我该如何将脚本提供给服务器?

写sql脚本时,怎么写注释? # 是否仍用于表示注释?

我需要提供 shebang 吗?如果是,那么有一个 shebang 是不是一个好主意?

谢谢。

我正在尝试放置 https://stackoverflow.com/a/771880/156458放入 sql 脚本中,以便我可以重用它。

最佳答案

与许多 SQL shell 一样,psql对 Postgres 语法有基本的了解。这允许它识别语句的结尾并将其转发给服务器以供执行。许多客户还出于其他原因需要了解语法,例如语法突出显示。

默认的语句终止符是;可以出现在字符串中。这意味着需要一个基本的解析器来避免发送不完整的语句。此终止符也可以更改,因此客户端需要跟踪当前终止符或“定界符”是什么。

确实没有像脚本语言那样可以直接执行的独立 SQL 脚本。您应该有一个最小的包装器,它可以帮助正确连接到服务器、进行身份验证,然后通过使用重定向(例如 do-sql < test.sql )或类似 \i 的功能在 SQL 中发送负载。导入工具。

关于postgresql - 一个 sql 脚本是只被 PostgreSQL 服务器接受,还是被服务器和客户端 psql 接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50878093/

相关文章:

java - 如何使用Java执行文件夹中的所有sql脚本?

postgresql - "\d"jdbc 程序失败

oracle - 按 PostgreSQL 中的主键位置对列进行排序

postgresql - postgres在时间列上选择查询生成输出错误

gradle - Gradle Exec Task不是在远程主机上以psql开头

mysql - 有条件地中止 MySQL 脚本

postgresql - sql 触发器 - 更新/插入

SQL 查询连接两个表类似于左外连接

c# - 如何处理 postgreSQL 中复合类型的变化

sql - Oracle:如何舍入和更新表中的所有数字?