首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将具有重复名称的MySQL索引转换为PostgreSQL

将具有重复名称的MySQL索引转换为PostgreSQL
EN

Stack Overflow用户
提问于 2014-06-07 02:00:09
回答 2查看 234关注 0票数 0

我正在将一些CREATE查询从MySQL转换到Postgres,并遇到了在不同表上创建多个名称相同的键(也称为索引)时遇到的问题。

例如,在MySQL中,可以有多个CREATE查询,这些查询包含相同的索引创建语法: KEY OrgId (SiteId) --参见本文末尾的MySQL示例。

在Postgres中,我理解您不能在CREATE查询中定义索引,因此我运行两个单独的Postgres查询来定义索引:

代码语言:javascript
运行
复制
CREATE INDEX OrgId ON MenuTypes USING btree (SiteId);
CREATE INDEX OrgId ON Pages USING btree (SiteId);

当第一个CREATE查询工作正常时,第二个索引查询无法运行,因为索引名称是重复的。(错误:关系"orgid“已经存在)

有没有人知道我该怎么处理这件事?

下面是我试图转换为Postgres的两个MySQL查询:

代码语言:javascript
运行
复制
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 ;
EN

回答 2

Stack Overflow用户

发布于 2014-06-07 02:36:03

最简单的方法就是根本不指定名字。“在页面上创建索引(SiteId)”;Postgres将构成一个不同的名称。否则,你自己编出不同的名字。“在……上创建索引idx_Pages_SiteId”)

票数 1
EN

Stack Overflow用户

发布于 2014-06-07 12:11:56

正如Craig所说,索引只在数据库内部使用,因此索引名并不重要--但在PostgreSQL中它们必须是唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24092919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档