【发布时间】:2017-10-06 22:09:44
【问题描述】:
在我的程序中,我将一些数据插入到一个表中并取回它的 id,我需要确保我将该 id 输入到另一个具有唯一随机生成字符串的表中。但是,如果尝试插入已经存在的随机字符串而插入失败,我该如何重复插入直到成功?
我正在使用pg-promise 与 postgreSQL 对话。我可以运行这样的程序,将数据插入到两个表中,因为随机字符串不存在:
db.none(
`
WITH insert_post AS
(
INSERT INTO table_one(text) VALUES('abcd123')
RETURNING id
)
INSERT INTO table_two(id, randstr)
VALUES((SELECT id FROM insert_post), '${randStrFn()}')
`
)
.then(() => console.log("Success"))
.catch(err => console.log(err));
我不确定是否有任何基于 SQL/JS/pg-promise 的简单解决方案可供我使用。
【问题讨论】:
-
只是想知道 - 为什么你使用随机字符串而不是 ID/sequence/UUID?
-
也许您想要实现的目标与您使用的库无关。听起来您只需要将
ON CONFLICT DO NOTHING附加到您的INSERT查询或类似查询中。无论如何,这是一个与 SQL 相关的问题,而不是与库相关的问题。 -
@Lashane 随机字符串将是前端用户将使用的 id 的别名。
-
@vitaly-t 我似乎找不到适合初学者的
ON CONFLICT DO NOTHING解释。阅读this,我不确定如何使用它,因此如果失败我可以重新尝试插入。
标签: sql node.js postgresql promise pg-promise