我正在从MongoDB切换到PostgreSQL,并且想知道如何实现与MongoDB中使用的相同的概念,以便通过MongoId唯一地识别每个原始数据。
迁移后,我们数据库中已存在的唯一字段将保存为字符类型。我正在寻找最小的源代码更改。
因此,如果postgresql中存在任何方法,可以为每次插入表生成自动增量唯一ID。
答案 0 :(得分:2)
PostgreSQL中最接近MongoDB's ObjectId的是uuid
type。请注意,ObjectId只有12个字节,而UUID有128位(16个字节)。
您可以通过附加(或预先添加)f.ex来转换您的存在ID。 '00000000'
给他们。
alter table some_table
alter id_column
type uuid
using (id_column || '00000000')::uuid;
尽管在迁移架构+数据时可以做到这一点是最好的。如果在迁移过程中无法执行此操作,则需要更新ID(当它们仍为varchar
时:这样引用的列将传播更改),删除外键,执行{{1}然后重新应用外键。
您可以使用uuid-ossp
module生成各种UUID(对于列的默认值)。
alter type
答案 1 :(得分:0)
使用序列作为列的默认值:
create sequence some_id_sequence
start with 100000
owned by some_table.id_column;
start with
应该大于您当前的最大数量。
然后将该序列用作列的默认值:
alter table some_table
alter id_column set default nextval('some_id_sequence')::text;
更好的解决方案是将列更改为整数列。在text
(或varchar
)列中存储数字是一个非常糟糕的主意。