WHERE LIKE Bedinung bei Rule schlägt fehl

Hallo,

ich habe eine Regel auf eine Tabelle erstellt, die bei einfügen eines bestimmten Eintrages einen Vermerk in einer anderen Tabelle setzen soll:

CREATE OR REPLACE RULE version AS ON INSERT TO t_log WHERE new.abgerufene_datei LIKE ‘%version%’ DO (
[…]
)

Leider spricht die Regel nicht an. Sobald ich den Vergleichsoperator auf = setze (also new.abgerufene_datei=‘something’) funktioniert es. Ich kann aber nicht 100% voraussagen, was in dem Feld steht, da die Version sich mit der Zeit ändert…

Ich habe folgende Operatoren probiert, bei allen schlägt es fehl.

new.abgerufene_datei LIKE ‘%version%’
new.abgerufene_datei ~~ ‘%version%’
new.abgerufene_datei ~* ‘.version.
new.abgerufene_datei ~ ‘.version.

Das Postgres Manual schreibt zu conditions: “Any SQL conditional expression (returning boolean). The condition expression may not refer to any tables except new and old, and may not contain aggregate functions.”

Was mache ich falsch?

Es ist ein PostgreSQL 7.4.7 unter Linux.

bYe Martin

Update:

Es funktioniert in dem ganzen Feld nicht…wende ich die entsprechenden Operatoren auf eine andere Spalte an funktioniert es.

Works for me:

test=*# create table log (t text);
CREATE TABLE
test=*# create table log_2 (t text);
CREATE TABLE
test=*# create or replace rule r_log as on insert to log where new.t ~ '.*foo.*' do also insert into log_2 values (new.t);
CREATE RULE
test=*# insert into log values ('bla');
INSERT 0 1
test=*# insert into log values ('bla foo bla');
INSERT 0 1
test=*# select * from log_2;
      t
-------------
 bla foo bla
(1 Zeile)

test=*# select version();
                                            version
-----------------------------------------------------------------------------------------------
 PostgreSQL 8.3.3 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
(1 Zeile)

Andreas