postgresql - PostgreSQL 约束和主键同名
问题描述
从 Oracle 迁移我想重用一些定义,例如:
ALTER TABLE CLIENTUSERS
ADD CONSTRAINT UK_CLIENTUSERS_CLIENTUS UNIQUE (CLIENTID, USERID)
USING INDEX TABLESPACE IDX
但是,这失败了,因为子句using index
缺少索引名称。问题是当我指定UK_CLIENTUSERS_CLIENTUS
它失败时[42P07] ERROR: relation "uk_clientusers_clientus" already exists
我是否需要为约束生成另一个名称,或者是否可以像 oracle 一样重用索引的名称?
解决方案
如果要使用USING INDEX
语法,则应在ALTER TABLE
语句中省略列列表:
CREATE TABLE CLIENTUSERS(CLIENTID INT, USERID INT);
CREATE UNIQUE INDEX UK_CLIENTUSERS_CLIENTUS ON CLIENTUSERS(CLIENTID, USERID);
ALTER TABLE CLIENTUSERS
ADD CONSTRAINT UK_CLIENTUSERS_CLIENTUS UNIQUE -- here columns were removed
USING INDEX UK_CLIENTUSERS_CLIENTUS;
推荐阅读
- javascript - Javascript 使用此变量获取索引值
- logstash - 在合并两个数据源时,Logstash 聚合映射仅适用于几行
- bitbucket - 从 Bitbucket API 获取所有工作区
- sql - 单表排序查询
- autodesk-forge - 强制加载光栅 PDF
- css - 将样式表导入 ASP.net 时出现 404 错误
- node.js - 上传文件时 Sailsjs 权限被拒绝创建文件夹
- c++ - 0x20 被视为 0x00 与字符串流
- flutter - 带有@required最佳参数的Dart抽象类方法
- ant - Ant 在 azure devops 中构建 sonarqube 设置