Thx for clarification, Craig. Your Perl snippet comes in handy, too.
-ar

On Apr 10, 2013, at 8:08 PM, Craig James <cja...@emolecules.com> wrote:

> On Wed, Apr 10, 2013 at 4:59 PM, Armin Resch <resc...@gmail.com> wrote:
>> Not sure this is the right list to vent about this but here you go:
>> 
>> I) select regexp_replace('BEFORE.AFTER','(.*)\..*','\1','g') "Substring"
>> II) select regexp_replace('BEFORE.AFTER','(.*)\\..*','\\1','g') "Substring"
>> 
>> Executing (II) against pg 8.4.4 or 9.0.4 yields 'BEFORE', but in order for 
>> 9.1.7 to yield the same one has to execute (I) .. bummer
> 
> This has nothing to do with regexp's.  It's a change in how '\' is 
> interpreted in any quoted string.  The change came with Postgres 9.x and is 
> documented in the release notes.  It brings Postgres into compliance with the 
> SQL standard.
> 
> In Perl, I do something like this:
> 
> my $pg_bs_char;
> if ($dbh->get_info($GetInfoType{SQL_DBMS_VER}) gt "09.00.00") {
>     $pg_bs_char = "\\";         # a single '\' for PG 9.1 and higher
> } else {
>     $pg_bs_char = "\\\\";       # a double '\\' for PG up to 9.0
> }
> 
> You can also revert to the old 8.x interpretation; see
> 
>   http://www.postgresql.org/docs/9.1/static/runtime-config-compatible.html
> 
> Craig
>  
>> 
>> -ar
> 

Reply via email to