postgresql數據庫中有一個josnb類型的數據:{ "paraInfo":[ { "lot":"A211225VJA1", "power":"70.00", "speed":"230.00", "nutName":"nut1", "waveform":"0#", "frequency":"700.00", "weldingTime":"20230605085401" }, { "lot":"A211225VJA1", "power":"70.00", "speed":"230.00", "nutName":"nut2", "waveform":"0#", "frequency":"700.00", "weldingTime":"20230605085401" } ] },如何使用SQL語句將他轉化為這樣的json數據:{ "nut1>lot":"A211225VJA1", "nut1>power":"70.00", "nut1>speed":"230.00", "nut1>waveform":"0#", "nut1>frequency":"700.00", "nut1>weldingTime":"20230605085401", "nut2>lot":"A211225VJA1", "nut2>power":"70.00", "nut2>speed":"230.00", "nut2>nutName":"nut2", "nut2>waveform":"0#", "nut2>frequency":"700.00", "nut2>weldingTime":"20230605085401" }
时间: 2023-07-08 13:51:39 浏览: 45
你可以使用PostgreSQL的jsonb_build_object函数和jsonb_agg函数来实现这个要求。
下面是一个示例查询语句,假设你有一个名为"test"的表,其中包含一个名为"data"的jsonb列:
```sql
SELECT jsonb_agg(
jsonb_build_object(
nutName || '>' || key, value
)
)
FROM test, jsonb_array_elements(data->'paraInfo') info, jsonb_each(info)
WHERE key != 'nutName';
```
在这个查询中,我们首先使用jsonb_array_elements函数将jsonb数组"paraInfo"拆分为对象,并使用jsonb_each函数将每个对象拆分为键值对。然后,使用nutName和key拼接出新的键,并使用value作为新的键值对的值。最后,使用jsonb_agg函数将所有新的键值对合并为一个新的jsonb数组。
这个查询将返回一个新的jsonb数组,其中包含所有新的键值对。
相关问题
cause: org.postgresql.util.psqlexception: 错误: 无法确定参数 $1 的数据类型
这个错误是由于在执行PostgreSQL数据库查询操作时,无法确定参数$1的数据类型所引起的。
在PostgreSQL中,当执行带有参数的查询语句时,需要明确指定参数的数据类型。然而,由于某种原因,数据库无法确定参数$1的数据类型,因此触发了这个错误。这种情况通常是由于以下几种原因之一引起的:
1. 参数未正确设置数据类型:在编写查询语句时,如果使用了参数,必须明确为参数设置数据类型。如果未正确设置数据类型,数据库就无法确定参数的数据类型。
2. 参数类型与数据库字段类型不匹配:当参数的数据类型与数据库字段的数据类型不匹配时,也会导致数据库无法确定参数的数据类型。例如,如果参数应该是整数类型,但在查询语句中设置为字符串类型,即会触发此错误。
解决此问题的方法包括:
1. 显示指定参数的数据类型:在查询语句中,明确为参数设置数据类型。例如,如果参数是整数类型,可以使用`::int`来明确指定参数的数据类型。
2. 检查参数与数据库字段的匹配:确保查询语句中的参数数据类型与数据库字段的数据类型相匹配。如果不匹配,可以对参数进行适当的转换,以使其与数据库字段类型一致。
总结起来,当在执行PostgreSQL数据库查询操作时,遇到 "错误: 无法确定参数$1的数据类型" 的错误时,应该检查查询语句中参数的数据类型设置是否正确,并确保参数与数据库字段的数据类型匹配。如果需要,可以显示指定参数的数据类型以解决此问题。
pg_ctl: 目录 "/path/to/postgresql/data"不是一个数据库集群目录
这个错误通常是因为你指定的目录不是一个有效的 PostgreSQL 数据库集群目录。请确保你指定的目录是一个已经初始化的 PostgreSQL 数据库集群目录,而不是一个空目录或者其他类型的目录。
你可以通过以下命令来初始化一个 PostgreSQL 数据库集群目录:
```
initdb -D /path/to/postgresql/data
```
该命令将在指定的目录中创建必要的文件和目录结构,以便 PostgreSQL 数据库可以运行。如果该目录已经被初始化,那么该命令将会失败。
请注意,在运行 pg_ctl 命令时,你需要使用正确的数据目录路径。如果你不确定数据目录的路径,请检查 PostgreSQL 的配置文件(通常是 postgresql.conf 文件)以查看数据目录的位置。