Friday, September 21, 2007

Solucion: ERROR: language "plpgsql" does not exist

PostgreSQL puede ser programado con muchos lenguages y el mas usado es PL/pgSQL pero no siempre se instala por defecto. Para corregir este problema en Ubuntu Linux se realizan los siguientes pasos: 1. Localizar el archivo plpgsql.so Este archivo es una libreria de funciones que ejecuta el codigo PL/pgSQL, para localizarlo hacemos lo siguiente: $sudo updatedb $locate plpgsql.so Con estas instrucciones Linux localizara el archivo y nos dara la ruta de la libreria, en mi caso para Ubuntu 7.04 y PostgreSQL 8.2 la ruta seria la siguiente: /usr/lib/postgresql/8.2/lib/plpgsql.so 2. Instalar el handler y lenguage. Una vez localizada la ruta de la libreria handler del lenguage(ver paso 1) se procede a crear el handler en PostgreSQL, para esto se necesita una conexion a PosgreSQL que puede hacerse con pgadmin3 o la utilidad de linea de comandos psql. Envie a PostgreSQL los siguientes comandos: CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS '/usr/lib/postgresql/8.2/lib/plpgsql.so' LANGUAGE 'C'; CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'; Listo, con esto ya creo el lenguage PL/pgSQL correctamente. Intente ejecutar nuevamente el script que genero el error original. Nota: la creacion o configuracion de cada lenguage de PostgreSQL se hace por base de datos, no en el servidor o en todas las bases de datos al mismo tiempo. Si necesita crear el leguage en varias bases de datos debe ejecutar el Paso 2 en cada base de datos o ejecutar el Paso 2 en alguna de las plantillas(template0,template1,etc) y despues crear las otras bases de datos futuras basadas en esta plantilla. Consulte tambien Acerca de PL/pgSQL [Actualizacion-28/09/2007] El error tambien puede ocurrir en Windows con el instalador por defecto de PostgreSQL, el handler puede que este creado pero no el lenguage. Para solucionarlo ingrese con el usuario POSTGRES en la base de datos donde necesita el lenguage y ejecute el siguiente script: CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator; Si el handler no existe se debe crear usando el procedimiento mencionado mas arriba para Linux pero aputando al archivo plpgsql.dll(que normalmente se encuentra en "C:\Archivos de programa\PostgreSQL\8.2\lib" si no se cambio la ruta de instalacion por defecto).

12 comments:

Franklin said...

y para windows como es ke puedo habilitar? el plpgpsql, me sale el mismo error y no se ke hacer plz ayuda....

Johan Hernandez said...

franklin, crea tu nueva base de datos basada en el template0.

Franklin said...

gracias por tu respuesta, pero el problema persiste, =( ......
pdta: para hablar un poco mejor sobre mi problema, me podrias dar tu correo de hotmail por favor.
gracias de antemano .

Johan Hernandez said...

franklin, para chatear tengo un pluggo en la parte izquierda de mi blog. El buzon de messenger Windows Live y gtalk es 'thepumpkin1979' en su respectivo hotmail.com o gmail.com

Johan Hernandez said...

He realizado una actualizacion de este post para colcoar la solucion al problema de franklin.

Gustavo said...

Excelente, muchas gracias

Anonymous said...

gracias che, me re sirvio

davidecr said...

tnx my friend

Tonat said...

Creo que es más sencillo utilizar el binario 'createlang' que viene en tu instalación de postgresql.

postgres@blogspot$ createlang plpgsql

y listo.

Anonymous said...

Hola Johan espero me puedas responder sobre un problema que tengo.
Seguí tus pasos para crear el lenguaje plpgsql y en un principio creí que había quedado bien.
Cree el lenguaje en el template1 luego cree mi BD en la cual aparecía mi lenguaje, pero cuando fui a crear una función me aparece el siguiente error :
ERROR: permiso denegado al lenguaje plpgsql

así que en verdad estoy igual que al principio

Johan Hernandez said...

Cuando crees el lenguage usa CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql ... el TRUSTED es importante para que cualquiera que no sea superuser pueda usar el lenguage.

Espero haberte ayudado.

Saludos.

Olga Gamero said...

ahhahaha tu pagina me sirvio de mucho gracias, sabes cuando fui a cerrar la pagina de reojo vi tu foto, y me parecio conocida, quien iba a pensar q eras tu johan, q tiempo ....