Синтаксическая ошибка при использовании имен столбцов с пробелами в Postgres - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь создать таблицы по схеме. Однако я получаю следующую ошибку.

[Код: 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);

Спасибо

1 Ответ

2 голосов
/ 14 января 2020

Вы не можете иметь имена столбцов с пробелами в них. Если вы действительно хотите усложнить свою жизнь, тогда вам нужно их процитировать, например "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)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...