问题标签 [libpg]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 在单个 PGexec 调用中传递多个 postgres SQL 语句
在t-sql
中,可以在没有 . 的情况下运行多个select
语句;
。示例:
select 1 select 2
有效,分别返回 和 的两个数据1
集2
。
在postgres
中,不可能运行多个select
语句...您需要一个;
分隔符,否则会出现语法错误。
参考文档:http ://www.postgresql.org/docs/current/interactive/libpq-exec.html
在单个 PQexec 调用中发送的多个查询在单个事务中处理,除非查询字符串中包含显式的 BEGIN/COMMIT 命令以将其划分为多个事务。
我怎样才能做到这一点?
假设我想在服务器上运行这两个查询: select 1 select 2
: 应该是这样的:
begin
select 1
commit;
begin
select 2
commit
我可以只返回最后一个查询作为结果集,但我需要知道第一个查询是在服务器上执行的,即使它没有返回该结果集。
我为什么要这样做:我有一个复杂的 sql 脚本,它有大约 6 个临时表来构建主查询将使用的。通过使用;
语法分隔临时表,我无法安排此脚本按cron
计划运行。如果我可以让临时表运行并且主查询在同一个调用中访问它们PGexec
,我会非常非常高兴。
eclipse - 由于 libpng 安全漏洞,Google-Play 被拒绝
我有一个 Eclipse 项目。当我导出 APK 时它运行良好,但是当我在 google play 上发布它时它给了我这个错误:
Libpng 库
这些漏洞已在 libpng v1.0.66、v.1.2.56、v.1.4.19、v1.5.26 或更高版本中修复。您可以在这篇 Google 帮助中心文章中找到有关如何解决此问题的更多信息。
但这篇文章根本没有帮助。
有谁知道如何解决这个问题或我可以在哪里更改 libpng 版本?
谢谢你。
php - PostgreSQL 函数 pg_ping() 的目的是什么?
根据手册(https://php.net/pg_ping):
Aaaalright...那么,一个人会在哪里做到这一点?这是几个小时长的 while (1) 循环,很少进行查询吗?超时时间一般是多久?为什么会有超时?我应该更改一些设置吗?我不明白这个特性/功能的目的。我找不到任何关于何时使用或为什么使用它的合理示例或解释。
请解释。
php - 使用 PHP 的 pg_* 函数时如何检测 PostgreSQL 中的死锁?
我在 PostgreSQL 中使用事务。事务是严肃数据库的必要组成部分。交易不可避免地导致“死锁”。死锁按原样记录为错误。我不想记录任何错误,所以我需要处理这些死锁。据称,死锁是通过检测它们、抑制错误并重试查询直到它通过而没有死锁来处理的。
到目前为止,一切都很好。
现在开始解决问题。我使用pg_query_params()
andpg_query()
向 PostgreSQL 发送查询。这两者都FALSE
在失败时返回,或者在成功时返回“查询结果资源”。当 PostgreSQL 检测到死锁时,这些函数因此返回 aFALSE
并且我的 PHP 错误日志会收到一堆关于死锁的噪音。
PHP手册是这样说的pg_last_error()
:
错误消息可能会被内部 PostgreSQL (libpq) 函数调用覆盖。如果 PostgreSQL 模块函数内部发生多个错误,它可能不会返回适当的错误消息。
因此它不可靠,不能使用。它继续说:
使用 pg_result_error()、pg_result_error_field()、pg_result_status() 和 pg_connection_status() 来更好地处理错误。
查阅了这些功能后,我惊恐地意识到(正如它所说):
因为如果查询失败 pg_query() 返回 FALSE,你必须使用 pg_send_query() 和 pg_get_result() 来获取结果句柄。
pg_send_query()
和pg_send_query_params()
反过来是异步的。我不需要也不理解这样的“异步”SQL 查询。我不明白这是怎么可能的,也不明白为什么有人会想要它。
最终的结果是,再一次,我发现自己被画在一个角落里,似乎唯一的出路就是爬过烟囱,把自己弄得又脏又乱。
看来我被迫完全放弃pg_query_params()
,pg_query()
只是为了能够检测到死锁。真的可以这样吗?我只能想象“异步”而不是以“阻塞”、有序的方式发送 SQL 查询会产生什么新错误。
为什么这总是发生?每次我尝试做任何事情时,无论多么基本或常见,它似乎总是被其他人认为是“奇怪的边缘情况”。除了通过使用这些奇怪的“异步”函数(直到昨天我还没有听说过)来危及整个应用程序的完整性之外,肯定有一种方法可以检测死锁吗?
即使我要使用它们,仍然非常不清楚我将如何准确地检测到死锁。他们是否希望我解析错误并查找诸如“死锁”之类的英文字符串?这似乎也不对。感觉就像一个奇怪的黑客。
真的没有正确、干净的方法来检测死锁以便正确处理它们吗?
简单地抑制 PHP 错误(通过使用自定义错误记录器并检查字符串)只会解决错误日志噪音的问题,但实际上不会使死锁查询重试,因此他们永远不会完成他们的工作,只是默默无闻忽略。