[ale] perl trigger in postgresql
    Chris Woodfield 
    rekoil at semihuman.com
       
    Sat May 10 13:06:53 EDT 2008
    
    
  
I hope this isn't an obscure subject...
I have a table in a postgres DB that absolutely, positively, needs to  
be a legal URL string. While my perl frontends handle this via the URI- 
 >canonical function, I'd like to build an additional check in the DB  
via a trigger.
This is the first time I've done this, so it's likely I've made an  
obvious error somewhere...
Here's what's in the DB now (from pg_dump):
CREATE FUNCTION canonical_url() RETURNS "trigger"
     AS $_X$
use strict;
use URI;
if (($_TD->{event} ne 'INSERT') or ($_TD->{event} ne 'UPDATE')) {
     return;
} else  {
     my $url = new URI($_TD->{new}{url});
     $_TD->{new}->{url} = $url->canonical();
     return 'MODIFY';
}
$_X$
     LANGUAGE plperlu;
CREATE TRIGGER make_canonical_url
     BEFORE INSERT OR UPDATE ON url_table
     FOR EACH ROW
     EXECUTE PROCEDURE canonical_url();
However, when I do an insert on the table with illegal URL characters  
(such as spaces or double quotes), the url appears in my table as is,  
as if the trigger didn't get called, or the trigger function didn't  
modify the column.
Any ideas? Thanks in advance...
-Chris
    
    
More information about the Ale
mailing list