Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL迁移时在PostgreSQL中创建表时出错_Postgresql - Fatal编程技术网

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

从MySQL迁移时在PostgreSQL中创建表时出错,postgresql,Postgresql,我正在将我的数据库从MySQL迁移到PostgreSQL。在创建表时,我遇到了一个无法解决的错误。我的MySQL查询是这样的。 MYSQL查询 CREATE TABLE `configuration` ( `Name` varchar(300) NOT NULL, `Value` varchar(300) default NULL, `CType` char(1) default NULL, `Size` int(11) default NULL, `CGroup` va

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

  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`
PostgreSQL查询

  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-p5432-U postgres-f ps.sqltestdb
错误获取

  psql:ps.sql:40: ERROR:  syntax error at or near "(" at character 287
  psql:ps.sql:40: LINE 9:   KEY CType ('CType'),
从:

键通常是索引的同义词

在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)
    作为
    主键通常不是一个好主意。考虑添加<代码>系列< /代码>类型。
  • 未指定任何内容时,列的默认值为
    NULL
    ,因此无需指定
    defaultnull
  • PostgreSQL的数据类型为
    boolean