RE: search/replace in update - Mailing list pgsql-sql

From Jeff Eckermann
Subject RE: search/replace in update
Date
Msg-id 08CD1781F85AD4118E0800A0C9B8580B094ADF@NEZU
Whole thread Raw
In response to search/replace in update  (Gary Stainburn <gary.stainburn@ringways.co.uk>)
List pgsql-sql
Gary,
To answer your questions in the order given:
*    Parameters are as you guess.  You could juggle them any way you
like, but I think easier to remember if they correspond to the language
being used.
*    You call the function by including it in your SQL, like:
UPDATE table
SET mobile_number = search_replace (mobile_number, '07889', '0589')
WHERE mobile_number LIKE '0589%';
Or, if you just want to check that it works, you could do:
*    SELECT mobile_number, search_replace (mobile_number, '07889',
'0589') AS new_number
FROM table
WHERE mobile_number LIKE '0589%';
*    Procedural languages are not enabled by default: you need to do
that.  Easiest way is to run "createlang" from the OS prompt (see "man
createlang" for details, or PostgreSQL documentation).  For plperl, there
are extra steps required, which you can find in the documentation under
"Procedural Languages".  The result of those extra steps will be the
creation of a file "plperl.so", which you should then copy to your
/usr/local/lib directory.  You can then run "createlang plperl <database
name>", and you will be good to go.
PostgreSQL has lots of functions built in, but if you need something that is
missing, you can probably find it in one of the supported procedural
languages, and "import" it by wrapping in a custom function in the manner
shown below.
HTH
Jeff

> -----Original Message-----
> From:    Gary Stainburn [SMTP:gary.stainburn@ringways.co.uk]
> Sent:    Friday, June 15, 2001 6:31 AM
> To:    Jeff Eckermann; 'Josh Berkus'
> Cc:    pgsql-sql@postgresql.org
> Subject:    Re: search/replace in update
> 
> Hi Jeff,
> 
> Thanks for the response.  Although I've never used functions before, I
> kinda 
> follow what you're doing.  Presumably the parameters are field, old
> string, 
> new string.
> 
> However, I have two problems.
> 
> 1) I don't know how I would call that function
> 2) when I tried to create the function it failed saying unrecognised 
> landuage. The message I got was: 
> 
> ERROR:  Unrecognized language specified in a CREATE FUNCTION: 'plperl'.  
> Recognized languages are sql, C, internal and the created procedural 
> languages.
> 
> I'm running postgresql 7.0.2-2 installed from rpms onto RH6.1.
> 
> Gary
> 
> On Thursday 14 June 2001  4:42 pm, Jeff Eckermann wrote:
> > Which function would you be suggesting?  I hope not "translate".  That
> > works on characters, not strings.  Easy to confuse if you don't read
> > closely enough, as I found to my cost.
> > Easiest way using these functions would be:
> > UPDATE table
> > SET mobile_number = '07889' || substr (mobile_number, 5)
> > WHERE mobile_number LIKE '0589%';
> > Alternatively, you could define a generic search/replace function like:
> > CREATE FUNCTION search_replace (text, text, text)
> > RETURNS text AS '
> > RETURN @_[0] =~ s/@_[1]/@_[2]/
> > ' LANGUAGE 'plperl';
> > Which would be available anytime for similar purposes (credit to Tom
> Lane
> > for the idea).
> >
> > > -----Original Message-----
> > > From:    Josh Berkus [SMTP:josh@agliodbs.com]
> > > Sent:    Thursday, June 14, 2001 9:52 AM
> > > To:    Gary Stainburn
> > > Cc:    pgsql-sql@postgresql.org
> > > Subject:    Re: search/replace in update
> > >
> > > Gary,
> > >
> > > > This means that e.g. all mobile numbers that used to start 0589 now
> > > > start 07889.
> > > >
> > > > Is there a way in SQL to update the phone number in-place?
> > >
> > > Postgresql has a nifty string substitution function.  For this and
> other
> > > character manipulation functions, see:
> > >
> > > http://www.postgresql.org/idocs/index.php?functions-string.html
> > >
> > > You should be able to fairly easily swap out "07889" and replace it
> with
> > > "0589".
> > >
> > > -Josh
> > >
> > >
> > >
> > > ______AGLIO DATABASE SOLUTIONS___________________________
> > >                                        Josh Berkus
> > >   Complete information technology      josh@agliodbs.com
> > >    and data management solutions       (415) 565-7293
> > >   for law firms, small businesses        fax 621-2533
> > >     and non-profit organizations.      San Francisco
> > >
> > > ---------------------------(end of
> broadcast)---------------------------
> > > TIP 4: Don't 'kill -9' the postmaster
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
> http://www.postgresql.org/users-lounge/docs/faq.html


pgsql-sql by date:

Previous
From: Gary Stainburn
Date:
Subject: Re: search/replace in update
Next
From: Larry Rosenman
Date:
Subject: Why doesn't this pgsql function compile?