问题标签 [postgresql-9.6]
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 - 是否可以使用 CHECK 约束来测试 jsonb 数组中的对象?
我有以下域:
我尝试了 ALL(), jsonb 的几种变体?'key' 和 array_agg(jsonb_array_elements(VALUE)) 但我只是想不出一种方法来完成这个测试。
postgresql - 从多维数据集分组中删除重复的 NULL
如果 GROUP BY 多维数据集、汇总或分组集查询中的所有值都为空,则结果集包含一行用于设置为空的值和一行用于设置为空的值。
避免或删除这些重复项的最佳方法是什么?
例子:
postgresql - 无法在树莓派 3 上下载 Postgresql 9.6.1 版本(操作系统:Debian Jessie)
我特别需要这个版本以使其与 heroku app psql 版本兼容。如果版本不匹配,我无法将数据库从 heroku 应用程序拉到本地计算机。
当我执行时,
我得到的错误是:
pg_dump:服务器版本:9.6.1;pg_dump 版本:9.4.2
pg_dump:由于服务器版本不匹配而中止
但是,当我尝试在我的树莓派 3 上安装 9.6 版本时,当我执行
我得到的错误是:
E: 无法找到包 postgresql-9.6
E: 无法通过正则表达式 'postgresql-9.6' 找到任何包
postgresql - Postgresql INSERT ... ON CONFLICT ... WHERE 未触发
我有一张这样的桌子:
我正在尝试将数据导入表中,这样如果表中不存在file
和的组合,volume
则应添加新行,否则如果存在现有行,则应更新该行,以便
lastimport
为今天的日期.
但是,如果该行已经是今天的日期,我不想进行任何更新(同一行可能每天出现多次)。
我正在尝试为此使用 Postgresql 9.6 的新ON CONFLICT
子句,如下所示:
但它似乎对我不起作用。初始导入工作正常,但对于更新情况,即使 WHERE 子句为真,它似乎也不会更新:
由于今天是 2017 年 5 月 8 日,我本以为该行会更新。
在这种情况下,我是否误解了 WHERE 子句的目的或用法?
postgresql - PostgreSQL SELECT 输出参数
我正在将 MSSQL 数据库转换为 PostgreSQL,而我对 PostgreSQL 的体验处于“菜鸟”级别。我在 MSSQL 中有一个存储过程,我基本上将值分配给一组 OUT 参数。当我尝试执行以下脚本来创建函数时,我收到一个错误“错误:列“closehi”不存在”我无法弄清楚为什么我无法选择这些 OUT 参数。这是脚本:
在提出建议后,我将函数的部分更改如下:
但现在我收到一条错误消息,提示“错误:在“,”或附近出现语法错误,并且它直接指向 INTO 目标变量列表中 closehi 变量之后的逗号。
postgresql - PostgreSQL 选择进入 OUT 变量
这是我之前提出的问题的第二次迭代。我正在创建以下功能。
当我执行创建此函数时,我收到以下消息:
我正在尝试按照 PostgreSQL 上的文档进行操作
...其中目标可以是记录变量、行变量或简单变量和记录/行字段的逗号分隔列表。
OUT 参数算作“简单变量”吗?
postgresql - 优化 postgres 相似度查询(pg_trgm + gin index)
我定义了以下索引:
我正在执行以下查询:
该auth_user
表有 620 万行。
查询的速度似乎在很大程度上取决于查询可能返回的结果数量similarity
。
通过帮助增加相似性阈值set_limit
,但通过消除部分匹配降低了结果的有用性。
有些搜索会在 200 毫秒内返回,有些则需要 10 秒左右。
我们有一个使用 Elasticsearch 的现有实现,该功能可以在 < 200 毫秒内返回任何查询,同时进行更复杂(更好)的排名。
我想知道是否有任何方法可以改进这一点以获得更一致的性能?
我的理解是 GIN 索引(倒排索引)与 Elasticsearch 使用的基本方法相同,所以我认为可以进行一些优化。
一个EXPLAIN ANALYZE EXECUTE user_search('mel', 20)
节目:
服务器是在 Amazon RDS 上运行的 Postgres 9.6.1
更新
1.发布问题后不久,我发现了以下信息:https ://www.postgresql.org/message-id/464F3C5D.2000700@enterprisedb.com
所以我尝试了
这取得了很大的进步(以前> 10s)!
对于类似的查询,1.5s 仍然比 ES 慢,所以我仍然想听听任何优化查询的建议。
2.作为对评论的回应,并在看到这个问题(Postgresql GIN 索引比 pg_trgm 的 GIST 慢)后,我尝试了完全相同的设置,使用 GIST 索引代替 GIN 索引。
尝试与上面相同的搜索,它在 ~3.5 秒内返回,使用 default work_mem='4MB'
。增加work_mem
没有区别。
由此我得出结论,GIST 索引的内存效率更高(没有像 GIN 那样遇到病理情况),但是当 GIN 正常工作时比 GIN 慢。这与推荐 GIN 索引的文档中的描述一致。
3.我仍然不明白为什么要花这么多时间在:
我不明白为什么需要此步骤或它在做什么。
Bitmap Index Scan
每个username % $1
子句都有下面的三个……然后将这些结果与一个BitmapOr
步骤结合起来。这些部分都非常快。
但即使在我们没有用完工作内存的情况下,我们仍然在Bitmap Heap Scan
.
postgresql - 索引 jsonb 数组和查询 jsonb 数组
我需要让这个查询使用索引(在 jsonb 列上products_rec_jsonb
),比如"products"
,"categoryid"
和 "id"
.
我想索引"products"
并"category_id"
作为 GIN 和"id"
BTREE DESC(作为 bigint 数据类型)......问题是当我运行查询时它根本不使用索引。我该如何解决它?
database - 当我们需要触发程序的返回值时?
有关触发过程的文档(https://www.postgresql.org/docs/9.6/static/plpgsql-trigger.html)说:“触发函数必须返回 NULL 或记录/行”。
例子
假设some_trigger_function()
返回记录/行,我知道在此事件、此表等上调用并执行过程主体......但是该过程在哪里返回值?
问题是:我们什么时候使用那个返回值?为什么我们需要这个值?你能给出一些使用这个返回值的例子/解释吗?