Re: Running CREATE only on certain Postgres versions
От | Daniele Varrazzo |
---|---|
Тема | Re: Running CREATE only on certain Postgres versions |
Дата | |
Msg-id | CA+mi_8Z+OknJgRWfEV2jUxKGZhCy2Dcw50zuKDi4RCS+rD_r3w@mail.gmail.com обсуждение исходный текст |
Ответ на | Running CREATE only on certain Postgres versions (Robert James <srobertjames@gmail.com>) |
Список | pgsql-general |
On Mon, Sep 24, 2012 at 2:32 PM, Robert James <srobertjames@gmail.com> wrote: > I have some code which creates a function in Postgres, taken from > http://wiki.postgresql.org/wiki/Array_agg . > > DROP AGGREGATE IF EXISTS array_agg(anyelement); > CREATE AGGREGATE array_agg(anyelement) ( > SFUNC=array_append, > STYPE=anyarray, > INITCOND='{}' > ); > > The function was added in 8.4, and so the code fails when run on 8.4 or higher. > > How can I make the code cross-version compatible? For instance, how > can I tell it to check the version, and only run if 8.3 or lower? Or > another way to make it cross-version? You could create a plpgsql function that tries to creates the object catching the exception, then call the function and drop it. Something like the following (untested): create function try_to_create_aggregate() language plpgsql as $$ begin begin execute $agg$ DROP AGGREGATE IF EXISTS array_agg(anyelement); CREATE AGGREGATE array_agg(anyelement) ( ... $agg$ exception see here to know how to handle http://www.postgresql.org/docs/9.1/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING end; end $$; select try_to_create_aggregate(); drop function try_to_create_aggregate(); In more recent postgres versions you can use "do" avoiding to create the function. -- Daniele
В списке pgsql-general по дате отправления: