【发布时间】:2016-06-10 03:32:21
【问题描述】:
是否可以编写修改 DDL 语法的 PostgreSQL 扩展?
我正在 PostgreSQL 和 PostGIS 之上创建一个扩展,以支持特定空间数据模型 (OMT-G) 的完整性约束。为此,我想修改 CREATE TABLE 语法,它接受 CONSTRAINTS 的语法:
CONSTRAINT constraint_name CHECK ( expression )
但我想创建自己的语法,如下例所示,然后它将调用我已经编写的函数或触发器。
CREATE TABLE school_district (
id integer PRIMARY KEY,
school_name varchar(120)
geom geometry,
SPATIAL_CONSTRAINT PLANAR_SUBDIVISION (geom),
SPATIAL_CONSTRAINT CONTAINS school (geom)**
);
这可能吗?如果有,怎么做?
【问题讨论】:
-
不,这是不可能的。但是,如果您能提供一个真实示例来说明您真正想要实现的目标,那么可能会有一些替代解决方案。
-
只需使用
CHECK语法。那应该可以实现您想要的。 -
@Patrick,这实际上是我想要实现的。添加一些语法糖,以方便空间开发人员。例如,上面片段的第二个约束将证明对于添加到表中的每个新 school_district,其边界内的学校(在表学校中)必须存在。
-
@GordonLinoff 但我们的想法是为这个空间数据模型创建一个扩展。所以最好有一个像上面这样的语法。而且约束有点复杂,功能很多,如果可能的话,这将简化使用。
-
还是不行。如果你想扩展语法,你必须修改源代码并直接在 C 中编写功能。可能不是一个非常可行的想法......如果你有很多重复的约束并希望简化它,请查看domains跨度>
标签: sql postgresql postgis postgresql-9.1 ddl