postgresql 在google sheet中批量更新UUID插入查询

im9ewurl  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(120)

我有批量插入查询,我想插入到现有的数据库。我们希望更新现有的uuid,这样在运行此批量插入查询时就不会出现重复引用错误。
我将所有插入查询复制到列B中的Google工作表中,并在另一列A中生成一组新的UUID。在这里,我没有看到任何函数或解决方案可以用新生成的列A UUID替换列B插入查询中的UUID。下面屏幕截图中突出显示的ID需要更新。
Insert Query

bwitn5fc

bwitn5fc1#

在PostgreSQL 13+中有一个内置的gen_random_uuid()。在旧版本中,uuid-ossp扩展提供uuid_generate_v4()。您可以直接在insert语句中使用它们,而不是要替换的id:

INSERT INTO timeline_event 
VALUES (
    gen_random_uuid(),
    '2022-09-07 10:08:55.048',
    NULL,
    0,
    '2022-09-07 10:08:55.048',
    0,
    1,
    false,
    NULL,
    'CONFIGURATION',
    NULL,
    NULL,
    'f691d7c9-18a3-4c32-bd25-876f6e4ec19f'::uuid,
    'd1ac2ff7-01a6-4f5f-b1fe-d823253d2fa8'::uuid,
    '03000337-1918-4277-aeef-cc9b3bca543f'::uuid,
    '4c6a3248-f14b-4653-9627-47c15cec503d'::uuid )
returning *;

您甚至可以将它们添加到on conflict子句的语句末尾,以便在发生冲突时触发(只要id列具有unique约束):demo

INSERT INTO timeline_event 
VALUES (
    '2e1c5231-ba19-4c27-bedc-bef6c4066d75'::uuid,
    '2022-09-07 10:08:55.048',
    NULL,
    0,
    '2022-09-07 10:08:55.048',
    0,
    1,
    false,
    NULL,
    'CONFIGURATION',
    NULL,
    NULL,
    'f691d7c9-18a3-4c32-bd25-876f6e4ec19f'::uuid,
    'd1ac2ff7-01a6-4f5f-b1fe-d823253d2fa8'::uuid,
    '03000337-1918-4277-aeef-cc9b3bca543f'::uuid,
    '4c6a3248-f14b-4653-9627-47c15cec503d'::uuid )
on conflict (id) do update set id=gen_random_uuid() --this
returning *;

相关问题