viernes, 5 de octubre de 2012

Error al cargar backup de PostgreSQL 9.1 a 8.4 con funciones que usen PL/pgsql

Al querer cargar un archivo de backup desde una versión más reciente a una anterior siempre surgen problemas. Este es uno de ellos si cargamos un archivo de backup hecho con pg_dump desde la versión 9.1 a una versión anterior y tenemos funciones (tal vez triggers) programados con PL/pgsql. A mí me sucede porque mi máquina de trabajo tiene un Fedora 17 y mi servidor tiene Debian 6. Al intentarlo aparecerá el siguiente error:

ERROR: error de sintaxis en o cerca de «EXTENSION»
LÍNEA 1: CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalo...

Y no creará las funciones que dependan de este lenguaje.

Ahora PostgreSql introdujo el comando CREATE EXTENSION para reemplazar varias tareas. Este comando no existe en las versiones anteriores a la 9.1, pero si no observamos más errores, corregirlo es sencillo: editamos nuestro archivo de backup y eliminamos las siguientes líneas:

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

Y las reemplazamos por la siguiente:

CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL';

Y listo! Claro está que ésto sólo corregirá el error para PL/pgSQL y si tenemos más problemas de compatibilidad con CREATE EXTENSION habrá que buscar la solución para cada uno de ellos.