PostgreSQL:使用子句词作为列名

PostgreSQL: Using clause words as column names

前言: 我正在使用 OSM2PGSQL 将我的 OpenStreetMap(OSM) 数据导入 PostgreSQL。这会导入与数据中每个元素关联的所有标签,其中之一是 "natural" 标签。这个标签定义了这个区域是什么类型的地形。 (IE,自然=水意味着这个坐标定义了一个水域)。

我正在尝试访问表示为 "natural" 的列,例如在查询

SELECT * FROM planet_osm_polygon WHERE natural='water' LIMIT 100;

但是,由于NATURAL也是一个PostgresSQL子句,查询returns出错。

有办法解决这个问题吗?我试过用引号将 natural 这个词括起来,但没有用。

双引号应该可以。这是我用来验证的一个简单示例

# create table test123( "natural" text );
CREATE TABLE
# insert into test123 values('test');
INSERT 0 1
# insert into test123 values('water');
INSERT 0 1
# select * from test123 where "natural"='water';
natural 
---------
water
(1 row)