Thread: Function definitions - batch update

Function definitions - batch update

From
Marcin Krawczyk
Date:
Hi list,

I've come across a situation when I need to add some constant code to all functions in my database. Does anyone know a way to batch update all definitions ? I've got like 500 functions so doing it one by one will be time consuming.

pozdrowienia
mk

Re: Function definitions - batch update

From
Tom Lane
Date:
Marcin Krawczyk <jankes.mk@gmail.com> writes:
> I've come across a situation when I need to add some constant code to all
> functions in my database. Does anyone know a way to batch update all
> definitions ? I've got like 500 functions so doing it one by one will be
> time consuming.

If you're feeling like a DBA cowboy, become superuser and issue a direct
UPDATE against the prosrc column of pg_proc, being careful not to update
rows that aren't the functions you want to hit.

Slightly saner would be to read pg_proc and construct CREATE OR REPLACE
FUNCTION commands that you then EXECUTE.  The latter, if not done as
superuser, would at least ensure you didn't accidentally break any
functions you don't own.

In either case, I'd practice against a test copy of the database before
doing this live ...
        regards, tom lane


Re: Function definitions - batch update

From
Marcin Krawczyk
Date:
Thanks for the hints, I'll give it a try.


pozdrowienia
mk


2012/2/21 Tom Lane <tgl@sss.pgh.pa.us>
Marcin Krawczyk <jankes.mk@gmail.com> writes:
> I've come across a situation when I need to add some constant code to all
> functions in my database. Does anyone know a way to batch update all
> definitions ? I've got like 500 functions so doing it one by one will be
> time consuming.

If you're feeling like a DBA cowboy, become superuser and issue a direct
UPDATE against the prosrc column of pg_proc, being careful not to update
rows that aren't the functions you want to hit.

Slightly saner would be to read pg_proc and construct CREATE OR REPLACE
FUNCTION commands that you then EXECUTE.  The latter, if not done as
superuser, would at least ensure you didn't accidentally break any
functions you don't own.

In either case, I'd practice against a test copy of the database before
doing this live ...

                       regards, tom lane