是否有一种简单的方法可以为PostgreSQL中的=
运算符定义运算符别名?
如何为!=
和<>
运算符解决这个问题?只有<>
运算符似乎在pg_operators中。 !=
运算符是硬编码的吗?
对于使用自定义运算符的应用程序,这是必需的。在大多数环境中,此运算符应该像=
一样运行,但在某些情况下,我们通过创建自己的运算符和运算符类来定义特殊行为。但是对于正常情况,我们的运算符应该只是=
运算符的别名,因此它对使用该实现的应用程序是透明的。
答案 0 :(得分:1)
只需检查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
同时检查manual并注意命名规则,它有一些限制。