Есть ли простой способ определить операторный псевдоним для оператора =
в PostgreSQL?Как определить псевдоним оператора в PostgreSQL?
Как это решить для оператора !=
и <>
? Только оператор <>
, похоже, находится в pg_operators. Является ли жесткий диск !=
?
Это необходимо для приложения, которое использует самоопределяемый оператор. В большинстве сред этот оператор должен действовать как =
, но есть случаи, когда мы определяем особое поведение, создавая собственный оператор и операторский класс. Но для нормального случая наш оператор должен быть просто псевдонимом для оператора =
, так что он прозрачен для приложения, реализация которого используется.
То, что я делал до сих пор. Но для того, чтобы индексы работали с этим оператором, мне также нужно определить операторный класс и семейство и создать дополнительный индекс. Например, для индекса 'CREATE INDEX idx_fk1 ON tab (fk); необходим еще один индекс с новым классом op' CREATE INDEX idx_fk2 ON tab (fk my_int4_ops); ', чтобы оба запроса могли использовать индексы:' EXPLAIN ANALYZE SELECT * FROM tab WHERE fk = 1; 'и' EXPLAIN ANALYZE SELECT * FROM tab WHERE fk !!!! 1; '. Поэтому я задавался вопросом, есть ли способ, не создавая много новых индексов. –
Много работы и много места для ошибок. Я бы снова подумал и искал лучшее решение. –