postgresql - Unique Constraint 错误在 PostgreSQL 中创建表(从 MySQL 迁移)

标签 postgresql unique constraints database-migration

我以极大的热情阅读了标题为 Migrate from MySQL to PostgreSQL on Linux (Kubuntu) 的问题. 星球大战 主题让它变得更加有趣。但是我遇到了一个关于 PostgreSQL 中的Unique Constraints 的问题。

我密切关注上面的帖子,使用 sqlt 创建了一个 PostgreSQL DDL。 .思考过程是先创建模式/表,然后导入数据。然而,我的 72 个表中有 57 个使用 CONSTRAINT "userid"UNIQUE ("user_id", "key")

这是其中一个表格的示例:

CREATE TABLE "account_otherserviceinfo" (
    "id" serial NOT NULL,
    "user_id" bigint NOT NULL,
    "key" character varying(50) NOT NULL,
    "value" text NOT NULL,
    PRIMARY KEY ("id"),
    CONSTRAINT "user_id" UNIQUE ("user_id", "key")
);

当我使用 pgadmin3 中的查询工具将这些表复制到我的 PostgreSQL 数据库时,出现以下错误:

错误:关系“user_id”已经存在 SQL状态:42P07

我没有设计这个数据库模式。我只是帮助迁移过程。在阅读有关 Unique Constraints 的文档时,似乎可以使用相同的名称,只要它在不同的表中即可。 http://www.postgresql.org/docs/8.3/static/ddl-constraints.html .我是不是误解了这个?

如有任何建议或指点,我们将不胜感激。

谢谢!

PS:谢谢https://stackoverflow.com/users/59087/dave-jarvishttps://stackoverflow.com/users/26534/michael-trausch让我走到这一步 ;-)

最佳答案

When reading the documentation on Unique Constraints, it appears that it is Ok to use the same name as long as it's in a different table.

我不确定您正在阅读文档的哪一部分,但您误解了它。约束名称必须是全局唯一的。因此,您可以根据需要拥有任意数量的 UNIQUE ("user_id", "key"),但不能将它们中的每一个都命名为 "user_id"

关于postgresql - Unique Constraint 错误在 PostgreSQL 中创建表(从 MySQL 迁移),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368289/

相关文章:

grails - Grails:将字符串(用户名)用作主键,但是使用ignorecase保存并获取ID字符串(用户名)吗?

objective-c - NSDocument 唯一标识符

php - mock :测试参数是否是包含键/值对的数组

c - 需要扩展库才能使用 PG_MODULE_MAGIC 宏

javascript - 在行中对按其他列 ID 分组的一些其他列行值求和

sql - 从 Postgres 中选择截断的字符串

postgresql - 仅从 postgres tsvector 获得 1 个结果

mysql - 在Mysql中查找max distinct

ios - 如何调试自动布局约束?

mysql - MySQL 中的两列主键