PGAdmin执行CREATE TABLE建表时order附近出现语法错误如何解决
报错原因
order属于PostgreSQL的SQL保留关键字,不能直接作为普通字段名使用,同理你语句中的class也属于SQL保留关键字,即使修复order的问题,后续执行也会触发同类报错。
解决方案
有两种常用修改方式:
方案1:给保留关键字字段加双引号包裹
PostgreSQL中如果要将保留关键字用作标识符,需要用双引号括起来,修改后的建表语句如下:
CREATE TABLE plantedata ( gbifID INTEGER, datasetKey VARCHAR(200), occurrenceID VARCHAR(300), kingdom VARCHAR(50), phylum VARCHAR(50), "class" VARCHAR(50), "order" VARCHAR(50), family VARCHAR(50), genus VARCHAR(50), species VARCHAR(100), infraspecificEpithet VARCHAR(100), taxonRank VARCHAR(50), scientificName VARCHAR(200), verbatimScientificName VARCHAR(200), verbatimScientificNameAuthorship VARCHAR(200), countryCode VARCHAR(50), locality VARCHAR(200), stateProvince VARCHAR(100), occurrenceStatus VARCHAR(200), individualCount VARCHAR(100), publishingOrgKey VARCHAR(100), decimalLatitude NUMERIC(8,6), decimalLongitude NUMERIC(8,6), coordinateUncertaintyInMeters VARCHAR(100), coordinatePrecision VARCHAR(100), elevation VARCHAR(100), elevationAccuracy VARCHAR(100), depth VARCHAR(100), depthAccuracy VARCHAR(100), eventDate VARCHAR(100), day VARCHAR(100), month VARCHAR(100), year VARCHAR(100), taxonKey VARCHAR(100), speciesKey VARCHAR(100), basisOfRecord VARCHAR(100), institutionCode VARCHAR(100), collectionCode VARCHAR(100), catalogNumber VARCHAR(100), recordNumber VARCHAR(100), identifiedBy VARCHAR(100), dateIdentified VARCHAR(100), license VARCHAR(100), rightsHolder VARCHAR(100), recordedBy VARCHAR(100), typeStatus VARCHAR(100), establishmentMeans VARCHAR(100), lastInterpreted VARCHAR(100), mediaType VARCHAR(100), issue VARCHAR(100) );
注意:后续查询、插入等操作使用这两个字段时,也需要始终用双引号包裹,否则仍然会触发语法错误。
方案2:修改字段名避开保留关键字
更推荐该方案,可避免后续操作时反复处理双引号的问题。比如可以将class改为taxon_class,order改为taxon_order,仅修改对应字段定义即可,其余内容保持不变:
taxon_class VARCHAR(50), taxon_order VARCHAR(50),
后续所有SQL操作直接使用修改后的字段名即可,不需要额外处理。
内容的提问来源于stack exchange,提问作者Horst
相关产品推荐
相关产品推荐

