从MySQL迁移时在PostgreSQL中创建表时出错

时间:2016-02-27 11:47:03

标签: postgresql

我正在将我的数据库从MySQL迁移到PostgreSQL.While创建表我遇到了一个我无法解决的错误。我的MySQL查询是这样的。 MYSQL查询

U

PostgreSQL查询

  CREATE TABLE `configuration` (
  `Name` varchar(300) NOT NULL,
  `Value` varchar(300) default NULL,
  `CType` char(1) default NULL,
  `Size` int(11) default NULL,
  `CGroup` varchar(50) default NULL,
  `RestartReq` char(1) NOT NULL default 'Y',
  `Display` char(1) NOT NULL default 'Y',
  PRIMARY KEY  (`Name`),
  KEY `CType` (`CType`),
  CONSTRAINT `configuration_ibfk_1` FOREIGN KEY (`CType`) REFERENCES `conftype` (`CType`)
  )ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin`

使用 CREATE TABLE configuration ( Name varchar(300) PRIMARY KEY, Value varchar(300) default NULL, CType char(1) default NULL, Size integer default NULL, CGroup varchar(50) default NULL, RestartReq char(1) NOT NULL default 'Y', Display char(1) NOT NULL default 'Y', KEY CType (CType), CONSTRAINT `configuration_ibfk_1` FOREIGN KEY (CType) REFERENCES conftype (CType) ) 运行文件 获取错误


      psql -h localhost -p 5432 -U postgres  -f ps.sql testdb

1 个答案:

答案 0 :(得分:2)

来自MySQL documentation

  

KEY通常是INDEX的同义词。

在PostgreSQL中,您必须与表分开创建索引:

CREATE TABLE configuration (
  name varchar(300) PRIMARY KEY,
  value varchar(300),
  ctype char(1),
  size integer,
  cgroup varchar(50),
  restartreq boolean NOT NULL DEFAULT true,
  display boolean NOT NULL DEFAULT true,
  CONSTRAINT configuration_ibfk_1 FOREIGN KEY (ctype) REFERENCES conftype (ctype)
);

CREATE INDEX conf_key ON configuration(ctype);

其他几点:

  • PostgreSQL标识符(主要是表名和列名)不区分大小写,除非是双引号。标准方法是将标识符放在小写字母中,将关键字放在大写字母中。
  • 出于性能原因,使用varchar(300)作为PRIMARY KEY通常不是一个好主意。考虑添加serial类型。
  • 如果未指定任何内容,则列的默认值为NULL,因此无需指定DEFAULT NULL
  • PostgreSQL有boolean数据类型。