问题标签 [postgresql-9.5]
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 - 在存储过程中设置自定义选项
我正在尝试在存储过程中设置自定义选项,但它存储的是变量名称而不是变量的内容。
我希望current_setting
返回1
,而不是字符串值"_user_id"
。
sql - Postgres - ON CONFLICT - 如何知道是否发生了更新而不是插入
我有一张桌子
我需要大量写入此表,因此性能是关键。有时,我会写一条具有现有值的记录,f0
并将其更新time_stamp
为当前时间。为此,我使用了一个ON CONFLICT..DO UPDATE
子句。
问题是我需要知道是INSERT
发生了还是UPDATE
.
我虽然使用第二is_update
列。插入时,插入false
并
然后用RETURNING is_update
得到我想要的。问题在于引入了与数据本身无关的附加列。
postgresql - PostgreSQL INSERT ON CONFLICT UPDATE (upsert) 使用所有排除值
当您更新一行时(PostgreSQL >= 9.5),并且您希望可能的 INSERT 与可能的 UPDATE 完全相同,您可以这样编写:
有没有更短的方法?只是说:使用所有 EXCLUDE 值。
在 SQLite 中,我曾经这样做:
postgresql - 如何在 PostgreSQL 中转义管道字符 ('|')
所以我试图将一系列管道分隔文件导入 PgAdmin III(使用 PostgreSQL 9.5 DB)。
我最终得到了错误:
基本上该行有 25 列,而应该有 17 列……为什么?好吧,我发现几个字段中有竖线(“|”)字符。
我正在使用以下命令导入:
我一直在参考词汇结构文档,尽管我可能做错了......
我已经尝试用“/|”替换字段中的管道字符 和'//|',但到目前为止,两者都导致与上述相同的错误消息。
非常感谢,如果您需要更多信息,请告诉我!
sql - PostgreSQL 9.5 数组中字符串匹配的位置
我正在尝试搜索匹配字符串的数组位置,我看到有一个帖子包含字符串上字符的位置,但没有包含数组的帖子,这是我想要实现的示例:
我想知道包含单词“potato”的元素在哪里,所以结果应该是这样的:
我试图获取所有元素的长度,然后将数组转换为字符串,并搜索字符串以查看字符串匹配的位置并比较该位置是否可以进入任何数组元素长度之间,但这不是如果我在数组中的元素数量是可变的,并且在我的问题中是可变的,则可以工作。
postgresql - 如何从 PostgreSQL 中的字符串中删除不间断空格?
所以我有一个列 incarceration_date,它实际上是一个文本字段,我想将其转换为日期。通常没问题,但似乎此列中的每个值最后都有一个不间断空格( ),这当然会导致日期函数错误。
我尝试了两种不同的方法来解决这个问题,但没有成功。
尝试1:
尝试2:
我认为第二次尝试失败是因为 [[:space:]] 不包括零宽度不间断空间。
在这个特定的例子中,这些字段的宽度都是一样的,所以我可以通过只将前十个字符传递给 date 函数来解决这个问题。但是,我确实有一些用于导入数据的通用文本清理功能,我希望它们能够处理这个字符。
示例字符串如下所示:
但我不确定问题字符是否正确复制到 SO。
我正在使用 PostgreSQL-9.5.0。
通过 encode(incarceration_date::bytea, 'hex') 输出的 incarceration_date 列的一行输出为:
所有行都以c2a0
.
服务器编码为 UTF8。
mysql - PostgreSQL 的 SERIAL 与 MySQL 的 AUTO_INCREMENT?
我有这个 MySQL 片段:
当我尝试在 PostgreSQL 中写这个时:
我收到以下错误:
这是因为在 PostgreSQL 中,插入一个不会增加下一个插入的 id。如何创建我的表以使其符合 MySQL 行为?
这当然是一个人为的例子,但我正在将一个大型代码库从 MySQL 移植到 PostgreSQL,并且部分代码(我无法控制)使用两种样式(即有和没有 id)并且它们在 MySQL 中工作但确实在 PostgreSQL 中不起作用。
一个丑陋的黑客总是做SELECT setval('my_table_id_seq', (SELECT count(*) FROM my_table), TRUE)
......
json - 在子选择中过滤 jsonb 结果
我正在从多个表构建分层 JSON 结果。这些只是示例,但对于本演示的目的来说应该足以理解这个想法:
测试数据:
我创建了以下功能:
执行函数book_get
产生以下结果
现在我可以用一个WHERE
子句过滤数据,例如
我如何才能过滤authors
?例如,等同于WHERE _b.authors.'name' = 'Arthur C. Clarke'
.
我完全不知道会authors
变成什么类型?或者是?它仍然是一个记录(数组)吗?已经是 JSON 了吗?我猜是因为我可以访问id
,访问不是这样的问题吗title
?pages
_b.authors
访问_b.authors
给了我ERROR: missing FROM-clause entry for table "authors"
使用 JSON 运算符访问_b.authors->>..
或_b->authors->>..
给我
我记得使用GROUP BY
withHAVING
子句:
但这给了我错误:
错误:无法识别 json 类型的相等运算符
为了更清楚一点:
基本上会做我需要的,这只有在索引上的作者0
是Arthur C. Clarke
. 如果他与人合写了这本书并且他会排在第二位(索引 1),那么就不会有比赛了。所以我试图找到的是正确的扫描语法,_b.authors
它恰好是一个由作者填充的 JSON 数组。它只是不接受任何尝试。据我了解@>
,#>
仅支持JSONB
. 那么如何在_b.authors
针对值的任何列上进行选择时获得正确的语法。
更新 2
好的,再次阅读文档......似乎我没有从 Postgres 文档中得到关于 JSON 和 JSONB 在函数方面存在差异的部分,我认为这仅与数据类型有关。在where子句中使用诸如 etc 之to_json
类的to_jsonb
运算符似乎可以解决问题。@>
更新 3
@ErwinBrandstetter:有道理。LATERAL 我还不知道,很高兴知道它的存在。我掌握了 JSON/JSONB 的函数和运算符,现在对我来说很有意义。我不清楚的是在子句中找到LIKE
例如出现的情况。WHERE
如果我需要jsonb_array_elements
在数组中取消嵌套对象(因为在最后的WHERE
子句中,内容b.authors
是 JSONB 数据类型)。然后我可以做
并得到想要的结果,
WHERE
但是在我的示例中,在最后(最后)子句中实现这一目标的方法是什么?指出最后一个WHERE
子句,因为我想过滤完整的结果集,而不是在子选择中间的某个地方部分过滤。所以总的来说,我想在最终结果集中过滤掉作者中间名为“C”的书籍。或名字“亚瑟”。
更新 4
当然是在FROM
条款中。当我找出所有可能性时,我将不得不在最后进行性能调整,但这就是我想出的。
将给出作者姓名以“亚瑟”开头的所有书籍。我仍然感谢对这种方法的评论或更新。
sql - 需要找到列的平均值和重复次数
我有一个 SQL 语句:
它产生这个结果:
我想添加给定包的列平均排名和出现的列数,这将计算包出现在列表中的数量。我还想按 package_name 对结果进行分组,这样我就没有冗余了。
到目前为止,我尝试在 ORDER BY 之前添加一个 GROUP BY By 子句:
但它返回给我一个错误:
如果我添加它要求我添加的每一列,它就不起作用。我还尝试通过在 SELECT 之后添加来计算包名称的数量:
它会产生类似的错误。
我怎样才能得到我正在寻找的结果?我应该改为进行两个查询,还是可以一次获取所有内容?我准确地说,我已经查看了关于 SO 的其他答案,但没有一个人试图在“生产”列上进行计数。
感谢您的帮助。
编辑 :
这是我最初期望的结果:
虽然 Gordon 的建议没有给我正确的结果,但它让我走上了正轨,但当我读到这篇文章时:来自文档:“与常规聚合函数不同,使用窗口函数不会导致行分组为单个输出排。”
所以我又开始单独使用 COUNT 和 AVG。我的问题是我想显示排名列和日期以检查事情是否正确。但是,正如 Jarlh 在评论中提到的那样,将这些列放入 Select 会阻止 GROUP BY 按预期工作。
工作查询: