在 Postgres DB 上从 PHP (Kohana) 运行批处理 SQL 脚本的首选方法是什么

发布于 2024-12-12 07:26:21 字数 339 浏览 0 评论 0原文

我正在为 Kohana 3.2 项目设置 Postgres 数据库测试。我想创建一个临时模式,从文件中运行几个 sql 脚本来建立该模式,然后进行测试,然后将临时模式删除到tearDown 中。

我尝试使用 file_get_contents($sqlfilename) 获取脚本的内容,然后使用 Kohana 的 DB:query() 但这是 hack,无论如何都无法正常工作。

pg_execute 将不起作用,因为文件是批处理脚本

我应该使用 exec() 运行 psql 命令吗?

从 PHP 在 Postgres DB 上运行批处理脚本的最佳/首选方式是什么?

谢谢!!!

I'm setting up Postgres database testing for a Kohana 3.2 project. I would like to create a temporary schema, run several sql scripts from file to establish the schema, and then do my testing and then drop the temporary schema in tearDown.

I've tried getting the contents of the scripts using file_get_contents($sqlfilename) and then using Kohana's DB:query() but that is hack and didn't work properly anyway.

pg_execute will not work because the files are batch scripts

Should I run psql commands with exec()?

What is the best/preferred way of running batch scripts on a Postgres DB from PHP?

Thanks!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼角的笑意。 2024-12-19 07:26:21

pg_query 可以运行多个语句:

查询

<块引用>

要执行的 SQL 语句。当多个语句传递给函数时,它们会自动执行
作为一个事务,除非有显式的 BEGIN/COMMIT 命令
包含在查询字符串中。然而,使用多个事务
不建议调用一个函数。

查询中的数据应该正确转义。

因此,运行批处理脚本的一种巧妙方法是:

pg_query($conn, "BEGIN; COMMIT;\n" . file_get_contents($filename));

我能想到的唯一正确的替代方案是将 psql 作为外部程序运行:

system("psql < " . escapeshellarg($filename));

我还没有测试过其中任何一个。祝你好运。

pg_query can run multiple statements:

query

The SQL statement or statements to be executed. When multiple statements are passed to the function, they are automatically executed
as one transaction, unless there are explicit BEGIN/COMMIT commands
included in the query string. However, using multiple transactions in
one function call is not recommended.

Data inside the query should be properly escaped.

Thus, a hacky way to run a batch script would be:

pg_query($conn, "BEGIN; COMMIT;\n" . file_get_contents($filename));

The only correct alternative I can think of would be to run psql as an external program:

system("psql < " . escapeshellarg($filename));

I haven't tested either of these. Good luck.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文