POSTGRESQL:varchar类型字段的自动增量

时间:2017-01-06 09:33:13

标签: postgresql

我正在从MongoDB切换到PostgreSQL,并且想知道如何实现与MongoDB中使用的相同的概念,以便通过MongoId唯一地识别每个原始数据。

迁移后,我们数据库中已存在的唯一字段将保存为字符类型。我正在寻找最小的源代码更改。

因此,如果postgresql中存在任何方法,可以为每次插入表生成自动增量唯一ID。

2 个答案:

答案 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)列中存储数字是一个非常糟糕的主意。