有没有一种简单的方法可以为=
PostgreSQL 中的运算符定义运算符别名?
!=
和运算符是如何解决的<>
?只有<>
运算符似乎在 pg_operators 中。操作员是!=
硬编码的吗?
这是使用自定义运算符的应用程序所必需的。在大多数环境中,这个操作符应该像 a 一样=
,但在某些情况下,我们通过创建自己的操作符和操作符类来定义特殊行为。但在正常情况下,我们的操作符应该只是操作符的别名=
,以便应用程序使用哪个实现是透明的。
有没有一种简单的方法可以为=
PostgreSQL 中的运算符定义运算符别名?
!=
和运算符是如何解决的<>
?只有<>
运算符似乎在 pg_operators 中。操作员是!=
硬编码的吗?
这是使用自定义运算符的应用程序所必需的。在大多数环境中,这个操作符应该像 a 一样=
,但在某些情况下,我们通过创建自己的操作符和操作符类来定义特殊行为。但在正常情况下,我们的操作符应该只是操作符的别名=
,以便应用程序使用哪个实现是透明的。
只需检查 pgAdmin,模式 pg_catalog。它具有所有运算符,并向您展示如何为所有数据类型创建它们。是的,您必须为所有数据类型创建它们。所以它不仅仅是一个“别名”,你需要很多别名。
char = char 的示例,使用 !!!! 作为别名:
CREATE OPERATOR !!!! -- name
(
PROCEDURE = pg_catalog.chareq,
LEFTARG = "char",
RIGHTARG = "char",
COMMUTATOR = !!!!, -- the same as the name
RESTRICT = eqsel,
JOIN = eqjoinsel,
HASHES,
MERGES
);
SELECT 'a' !!!! 'a' -- true
SELECT 'a' !!!! 'b' -- false
还要检查手册并注意命名规则,它有一些限制。