使用列名在Postgres中使用空格的语法错误

问题描述 投票:0回答:1

我正在尝试在模式下创建表。但是,我得到以下错误。

[[代码:0,SQL状态:42601]错误:“ VARCHAR”或附近的语法错误位置:120 [脚本位置:120-123]

我无法调试语法错误在哪里。您可以在下面找到postgres查询。

CREATE SCHEMA IF NOT EXISTS ebi_mut_db;

        CREATE TABLE IF NOT EXISTS ebi_mut_db.version_info (
        version INT, 
        download_date DATE, 
        download_url TEXT, 
        responsible TEXT);

        CREATE TABLE IF NOT EXISTS ebi_mut_db.mutations_affecting_interactions (
        Feature AC NOT NULL VARCHAR (20), 
        Feature short label VARCHAR (50), 
        Feature range(s) VARCHAR (50), 
        Original sequence CHAR (50), 
        Resulting sequence CHAR (50), 
        Feature type VARCHAR (100), 
        Feature annotation VARCHAR (255), 
        Affected protein AC VARCHAR (100), 
        Affected protein symbol VARCHAR (100), 
        Affected protein full name VARCHAR (100), 
        Affected protein organism VARCHAR (100), 
        Interaction participants VARCHAR (255), 
        PubMedID VARCHAR (100), 
        Figure legend VARCHAR (50), 
        Interaction AC VARCHAR (50),
        PRIMARY KEY (Feature AC);

谢谢

postgresql database-schema ddl
1个回答
1
投票

您不能在其中包含空格的列名称。如果您确实想让自己的生活更艰难,那么就必须引用它们,例如"Feature AC"代替Feature AC

[NOT NULL属性变为之后数据类型,

"Feature AC" VARCHAR (20) NOT NULL, 

您在CREATE TABLE语句的末尾还缺少结尾)

并且请忘记char类型存在。它绝对没有优势,但是却有些令人讨厌。

所以整个陈述应该是:

CREATE TABLE IF NOT EXISTS ebi_mut_db.mutations_affecting_interactions 
(
  "Feature AC" VARCHAR (20) NOT NULL, 
  "Feature short label" VARCHAR (50), 
  "Feature range(s)" VARCHAR (50), 
  "Original sequence" VARCHAR (50), 
  "Resulting sequence" VARCHAR (50), 
  "Feature type" VARCHAR (100), 
  "Feature annotation" VARCHAR (255), 
  "Affected protein AC" VARCHAR (100), 
  "Affected protein symbol" VARCHAR (100), 
  "Affected protein full name" VARCHAR (100), 
  "Affected protein organism" VARCHAR (100), 
  "Interaction participants" VARCHAR (255), 
  "PubMedID" VARCHAR (100), 
  "Figure legend" VARCHAR (50), 
  "Interaction AC" VARCHAR (50),
  PRIMARY KEY (Feature AC)
);

但是您应该,真的,应该重新考虑您的列名。我强烈建议您使用类似这样的内容:

CREATE TABLE IF NOT EXISTS ebi_mut_db.mutations_affecting_interactions 
(
  feature_ac varchar (20) not null, 
  feature_short_label varchar (50), 
  feature_range varchar (50), 
  original_sequence varchar (50), 
  resulting_sequence varchar (50), 
  feature_type varchar (100), 
  feature_annotation varchar (255), 
  affected_protein_ac varchar (100), 
  affected_protein_symbol varchar (100), 
  affected_protein_full_name varchar (100), 
  affected_protein_organism varchar (100), 
  interaction participants varchar (255), 
  pub_med_id varchar (100), 
  figure_legend varchar (50), 
  interaction_ac varchar (50),
  primary key (feature ac)
);
© www.soinside.com 2019 - 2024. All rights reserved.