小编Akh*_*hra的帖子

PostgreSQL 中的逆透视表

我有下表作为 SUM(Case....End) 的结果。

Account            Product_A            Product_B           Product_C
101                 1000                  2000                 3000
102                 2000                  1000                  0
103                 2000                  1000                  0
104                 2000                  1000                  2000
Run Code Online (Sandbox Code Playgroud)

我想把它放回原来的表。像这样:

Account         Product               Qty
101               A                  1000
...               ..                 ....
Run Code Online (Sandbox Code Playgroud)

我认为“Unpivot”可以在 MS SQL Server 中做到这一点。但我只使用 PostgreSQL。Postgresql 中 Unpivot 的等效项是什么,可以返回/取消上表的分组?谢谢

sql postgresql unpivot

5
推荐指数
1
解决办法
1468
查看次数

使用节点获取特定 Postgres 数据库中的所有表?

我需要使用 node.js 获取特定 Postgres 数据库中的所有表。但没有找到任何方法来实现这一目标。有没有办法得到它?

例如,假设我有一个名为“TestDatabase”的数据库,它包含 4 个表(假设它可以有更少或更多)人、公司、衣服、动物。我需要使用 node.js 获取所有这些的名称。

我还使用 node-postgres ('pg') 连接数据库。

postgresql node.js node-postgres postgresql-12

5
推荐指数
0
解决办法
149
查看次数

如何从 json.agg() 函数返回不同的值

我有以下查询

select json_agg(t) from (
select  json_build_object(
'field_1',a.field_1,
'field_2',a.field_2,
'field_4',json_agg(json_build_object('id',g.id,'data',g.fullname)),
'field_9',json_agg(json_build_object('id',i.optionid,'data',i.option))
 ) as data

from schema_1.tbl_342 a
left join schema_1.tbl_342_to_tbl_329_field_10 b on a.id=b.tbl_342_id
left join schema_1.tbl_329_customid c on b.tbl_329_id=c.id
left join schema_1.tbl_329_field_23_join d on c.id=d.id
left join schema_1.tbl_329_field_23 e on d.optionid = e.optionid
left join schema_1.tbl_342_to_tbl_312_field_4 f on a.id=f.tbl_342_id
left join schema_1.tbl_312_customid g on f.tbl_312_id = g.id
left join schema_1.tbl_342_field_9_join h on h.id=a.id
left join schema_1.tbl_342_field_9 i on i.optionid=h.optionid   
group by a.field_1,a.field_2
) t
Run Code Online (Sandbox Code Playgroud)

这会产生以下JSON格式

   [
  {
  "data":{ …
Run Code Online (Sandbox Code Playgroud)

postgresql json

3
推荐指数
1
解决办法
4812
查看次数

Postgres 添加标识导致 ERROR START 值 (0) 不能小于 MINVALUE (1)

尝试运行这个,因为我希望自动生成的 ID 从 0 开始

alter table gender
alter column gender_id ADD GENERATED ALWAYS AS IDENTITY (START WITH 0 INCREMENT BY 1)
Run Code Online (Sandbox Code Playgroud)

并得到错误: START value (0) cannot be less than MINVALUE (1)

我还不擅长 PostgreSQL,所以不知道如何让它从 0 开始递增。

sql postgresql alter

3
推荐指数
1
解决办法
1067
查看次数

postgresql 选择一列中具有最大值的所有行

我是 postgresql 的新手,我在 postgresql 中有一个这样的表 T:

C1 C2 C3 C4 ID
Run Code Online (Sandbox Code Playgroud)

C1、C2、C4 是整数。
C3 是一个字符 C4 本质上是版本号。并且可以是 1-N 之间的任何值。
(例如,在一组插入事件之后更新表中的值。)ID 是一个字符。

问题:
对于给定的 ID 值,我想选择与它们相关联的 C4 最高的所有行。例如,表中可能有 N 个版本,我想要与版本 N 对应的所有结果。

我试过,

select C1,C2,C3, max(C4) from T where ID = 'something';

但它给了我错误。

请指教。

database postgresql window-functions ranking-functions

2
推荐指数
1
解决办法
4719
查看次数

Postgres 创建索引命令挂起

这类似于我最近发布的一个问题,其中 COPY 命令为大型数据集挂起。在那种情况下,这是由于外键约束。但在这种情况下,我正在创建一个索引,所以我认为 FK 不会成为问题,即使我仍然禁用了表上的触发器以防万一。我试图btree index在一个有 100 亿行的表上添加一个常规。该索引位于两个int字段上。我尝试运行它并且它永远运行,所以我认为它可能太慢了,我增加到max_parallel_maintenance_workers8 和maintenance_work_mem2047MB(我在 Windows 上,所以它是最大值)。

那时,事情似乎进展得更快了,但同样的问题发生了:我可以看到文件pgsql_tmp/pgsql_tmpxxxx.x.sharedfileset夹中的文件在增长,直到它们停止但索引创建似乎从未完成。

我想知道我是否出于某种原因设置了太多工人,所以我尝试将其设置为 4,同样的问题。文件最后一次修改是在凌晨 3 点 20 分左右,现在是早上 7 点 35 分,它仍在运行。文件夹中的文件为 261GB,与表大小相比看起来差不多,每次我运行该进程时它都会以该大小停止,所以我假设它已经创建了索引,我只是不知道它可能在做什么这一点。万一重要,该表在另一个有 10 亿条记录的表上有一个外键,但表上的触发器被禁用,这对我在表中加载数据很有用。我检查了锁,没有,它不等待任何锁,这是有道理的,因为这是一个测试数据库,其中包含我为测试某些事情而创建的虚拟数据,

postgresql indexing

1
推荐指数
1
解决办法
569
查看次数

在 postgres 查询中使用字符串替换更新值

我有表格user,我想username'test user'as替换字段值'Test User'

在所有username字段值的更新查询中

update user set username='replace()'
Run Code Online (Sandbox Code Playgroud)

是否可以通过查询来完成。

php sql postgresql

1
推荐指数
1
解决办法
31
查看次数