我正在使用 supabase postgresql。我已经在数据库中植入了各个表中的记录,现在正在尝试创建一个管理门户来在我的表中创建新记录。
对于我的相关表,我想自动在其上创建记录,而无需在插入期间提供 ID;为此,我将我的 pkey 设置为serial
. 不幸的是,当我尝试创建新记录时,它一直从 1 开始,然后是 2,然后是 3,因为我反复尝试提交我的新记录。最终,它超出了我的(10)种子记录,然后成功添加了新的第 11 条记录,依此类推。我不明白它为什么这样做,我本以为它会看到表中已经有 10 条记录,并且只是从 11 条开始。对此有更多了解的人可以为我提供一些见解吗?
这是我正在使用的 SUPABASE 插入,与SUPABASE 文档中提供的模板几乎相同:
const { data, error } = await supabase
.from('my_table')
.insert([
{someField: 'abc'}
])
.select()
我认为我可以提供的唯一其他背景是我的播种操作中的一些片段。我像这样插入表格:
INSERT INTO tableA (id, field, created_at, table_b_fkey)
VALUES
(1, 'hello world', '2024-03-16 14:00:00', 1),
...
INSERT INTO tableB (id, field, created_at)
VALUES
(1, 'hola mundo', '2024-03-16 14:00:00'),
...
在这些情况下,我实际上确实在我的表中提供了显式的primary_key
as ,id
因为我需要用表之间的关系来播种它。也许这就是尝试使用序列号添加新记录时产生问题的原因?
有两种选择:
DEFAULT
在开始插入行之前,将您在列的子句中看到的序列设置id
为高于id
您已播种的所有行的值:(我的建议是使用
bigint
标识列而不是serial
,但过程将保持不变:您已适当地设置了序列值。)(如果您不想要我的第一个建议,我的第二个建议是使用
bigserial
而不是serial
。)用于
uuid
主键列,那么就不用担心冲突了。