将多维数组插入到Postgres

3
在将多维数组插入到PostgreSQL时,是否有任何技巧?我想要插入类似的内容。
INSERT INTO Timesheet (day, startTime, endTime, idSchedule)
VALUES(unnest(array['TUE', 'FRI']),
       unnest(array[['10:00', '02:00'], ['10:00']]),
       unnest(array[['14:00', '23:00'], ['14:00']]), 1);

或者更详细地说:
INSERT INTO Timesheet (day, startTime, endTime, idSchedule)
VALUES('TUE', '10:00', '14:00', 1),
      ('TUE', '02:00', '23:00', 1),
      ('FRI', '10:00', '14:00', 1);

查询失败,原因为

ERROR: multidimensional arrays must have array expressions with matching dimensions

也许有解决方案吗?

1
starttime 是什么数据类型?你真的要在那个列中存储一个数组吗?你是想插入两行吗?一行是星期二,一行是星期五?为什么不能使用 values ('TUE, array[...], '10:00', 1), ('FRI', array[...], '14:00', 1) - user330315
不,我需要两次展开我的数组——例如,对于星期二,我必须插入startTime=10:00和startTime=02:00。 - Jane
1
抱歉,我不明白。如果您需要多行,则为什么不使用指定多行的“values”子句?array[['10:00', '02:00'], ['10:00']是一个无效的数组,因为第一个元素是二维数组,而第二个元素是一维数组,如果您想保留这种奇怪的方法,那么您将不得不将其更改为array[['10:00', '02:00'], ['10:00', '10:00']] - user330315
类似于以下代码:VALUES ('TUE', '10:00', '10:00', 1), ('TUE', '02:00', '10:00', 1), ('FRI', '14:00', '14:00', 1)我真的不明白你想要实现什么。 - user330315
1
输入格式是一个具有唯一时间的元素数组,我正在尝试在一行中实现插入... 在使用Python处理后,我得到了一个奇怪的数组。如果某些天的时间间隔不相等,我应该如何重写查询? - Jane
显示剩余5条评论
1个回答

1

你可能正在寻找

INSERT INTO Timesheet (day, startTime, endTime, idSchedule)
VALUES(unnest(array['TUE', 'TUE', 'FRI']),
       unnest(array['10:00', '02:00', '10:00']),
       unnest(array['14:00', '23:00', '14:00']), 1);

谢谢你的想法!它非常有效。我覆盖了我的Python脚本,所以没有任何嵌套数组。我想象中在向Postgres插入行时可以展平嵌套数组的方法。我发现只有当它们相等时才可能实现。因此,你的解决方案只适用于我的情况。 - Jane
在Postgres中肯定也有一些方法可以实现这个功能(例如使用JSON嵌套数组,它们不是相同长度的“多维数组”),但在Python脚本中进行展平可能更容易。 - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接