PostGIS创建表时出现语法错误该如何解决?
错误原因排查
你的建表语句存在3处明确语法错误,以及1处可优化的类型设计问题:
- 列定义缺少分隔逗号:
Warehouse_location、Warehouse_managers、Warehouse_address三个字段的定义末尾没有加逗号分隔,SQL解析时无法识别下一行的新字段,这是触发你当前Warehouse_id附近语法错误的直接原因。 - 含空格的列名未做转义:
Warehouse_loading bays字段名中间包含空格,SQL默认将空格判定为标识符分隔符,要么将空格改为下划线(更推荐,符合SQL命名规范),要么用双引号包裹整个列名才能正常识别。 - 最后一列尾随多余逗号:
Warehouse_accesspoints VARCHAR(50)末尾多了一个逗号,建表语句的括号前不允许出现多余的分隔符。 - (可选优化)
Warehouse_capacity、Warehouse_occupied等存储数值的字段,建议用INT类型替代VARCHAR,后续做统计、计算、排序时不需要额外做类型转换,性能和可用性更高。
修正后的完整可执行SQL
这里选择将含空格的列名改为下划线格式,符合通用命名规范:
CREATE TABLE Warehouse ( Warehouse_location VARCHAR(25), Warehouse_id VARCHAR(100), Warehouse_managers VARCHAR(25), Warehouse_address VARCHAR(25), Warehouse_capacity INT, Warehouse_occupied INT, Warehouse_loading_bays INT, Warehouse_accesspoints INT ); INSERT INTO Warehouse Values('Vic','1235','John', '12 Sidney St',500,230,10,5); INSERT INTO Warehouse Values('Vic','1236','Drake', '156 Can Rd',400,250,10,6); INSERT INTO Warehouse Values('Nsw','1237','Dave', '120 Toast Ave',400,240,9,5); INSERT INTO Warehouse Values('Vic','1238','Daniel', '99 Foot St',550,255,10,5); INSERT INTO Warehouse Values('Nsw','1434','Chirs', '21 Jump St',500,270,9,6); INSERT INTO Warehouse Values('Nsw','1734','Liam', '1 Bishop St',500,150,6,5); INSERT INTO Warehouse Values('Vic','7234','Steve', '12 Bewick Grove ',440,250,3,5); INSERT INTO Warehouse Values('Vic','8234','Bob', '23 Rannoch Wood Rd',440,250,11,5); INSERT INTO Warehouse Values('Vic','1224','Kim', '390 Park Ave',550,250,9,6); INSERT INTO Warehouse Values('SA','4234','Alex', '2 Grange Dr',550,250,10,5); INSERT INTO Warehouse Values('SA','1734','Ryan', '12 Food St',500,350,10,5);
内容的提问来源于stack exchange,提问作者Baker Man
相关产品推荐
相关产品推荐

