CREATE OR REPLACE LANGUAGE をシミュレートする
PostgreSQL で plpgsql を利用するには CREATE LANGUAGE する必要があるが、複数回実行すると2度目からエラーになってしまう。
"CREATE OR REPLACE" 的なことはできないかどうかググったところ、そのものずばりがかかれてあった。
http://wiki.postgresql.org/wiki/CREATE_OR_REPLACE_LANGUAGE
CREATE OR REPLACE FUNCTION make_plpgsql() RETURNS VOID LANGUAGE SQL AS $$ CREATE LANGUAGE plpgsql; $$; SELECT CASE WHEN EXISTS( SELECT 1 FROM pg_catalog.pg_language WHERE lanname='plpgsql' ) THEN NULL ELSE make_plpgsql() END; DROP FUNCTION make_plpgsql();
Chef でクエリを初回のみ実行する方法が分からなかったため調査していたのだが、これで Chef で複数回実行しても大丈夫になるはず?