我正在将一些CREATE查询从MySQL转换到Postgres,并遇到了在不同表上创建多个名称相同的键(也称为索引)时遇到的问题。
例如,在MySQL中,可以有多个CREATE查询,这些查询包含相同的索引创建语法: KEY OrgId
(SiteId
) --参见本文末尾的MySQL示例。
在Postgres中,我理解您不能在CREATE查询中定义索引,因此我运行两个单独的Postgres查询来定义索引:
CREATE INDEX OrgId ON MenuTypes USING btree (SiteId);
CREATE INDEX OrgId ON Pages USING btree (SiteId);
当第一个CREATE查询工作正常时,第二个索引查询无法运行,因为索引名称是重复的。(错误:关系"orgid“已经存在)
有没有人知道我该怎么处理这件事?
下面是我试图转换为Postgres的两个MySQL查询:
CREATE TABLE IF NOT EXISTS `MenuTypes` (
`MenuTypeId` int(11) NOT NULL AUTO_INCREMENT,
`MenuTypeUniqId` varchar(50) NOT NULL,
...
`SiteId` int(11) NOT NULL,
...
PRIMARY KEY (`MenuTypeId`),
KEY `OrgId` (`SiteId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `Pages` (
`PageId` int(11) NOT NULL AUTO_INCREMENT,
`PageUniqId` varchar(50) NOT NULL,
...
`SiteId` int(11) NOT NULL,
...
`Created` datetime NOT NULL,
PRIMARY KEY (`PageId`),
KEY `OrgId` (`SiteId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=457 ;
发布于 2014-06-07 02:36:03
最简单的方法就是根本不指定名字。“在页面上创建索引(SiteId)”;Postgres将构成一个不同的名称。否则,你自己编出不同的名字。“在……上创建索引idx_Pages_SiteId”)
发布于 2014-06-07 12:11:56
正如Craig所说,索引只在数据库内部使用,因此索引名并不重要--但在PostgreSQL中它们必须是唯一的。
https://stackoverflow.com/questions/24092919
复制相似问题