Showing posts with label DATABASE. Show all posts
Showing posts with label DATABASE. Show all posts

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).

Monday, September 17, 2007

Configurar Conexion Remota de Usuarios en MySQL5 en Ubuntu/Debian

MySQL 5 al igual que muchas otras bases de datos no permite conexiones remotas en su instalacion por defecto y hay que realizar ciertos pasos para configurarlo: 1. Editar el archivo /etc/mysql/my.cnf: Reemplazar esto: bind-address = 127.0.0.1 Por lo siguiente: bind-address = 0.0.0.0 Luego de guardar el archivo se procede a reiniciar el servidor de bases de datos MySQL, se puede hacer con el siguiente comando: /etc/init.d/mysql-server restart Aunque con estos paso ya hemos configurado a MySQL Server para permita conexion remota los usuarios no necesariamente puedan conectarse. 2. Permitimos al usuario conexion remota: Iniciamos la utilidad "mysql" en un Terminal del servidor donde esta instalado mysql server con el siguiente comando: mysql -u root -p Colocamos nuestra contraseña de root para mysql y procedemos a configurar a los usuarios para acceso remoto: GRANT ALL PRIVILEGES ON *.* TO root@'%'; FLUSH PRIVILEGES; Con la instruccion anterior se permite al usuario "root" conexion remota desde cualquier PC y aunque esta es la solucion mas sencilla no es la mas segura. Se debe asignar conexion remota por IP o Nombre de dominio. Ejemplo, con la siguiente instruccion se le permite conexion remota al usuario root desde la PC con la direccion IP 192.168.0.5: GRANT ALL PRIVILEGES ON *.* TO root@192.168.0.5 FLUSH PRIVILEGES; Nunca olvide hacer FLUSH PRIVILEGES para que los cambios en el sistema authenticacion y autorizacion de MySQL se hagan efectivos al momento. En los ejemplos anteriores se usa *.* para indicar que el usuario tiene acceso a todas las bases de datos con todos sus objetos(tablas, vistas, funciones) pero es buena practica tambien solo dar acceso a las bases de datos especificas. Ejemplo, con la siguiente instruccion vamos a asignar acceso remoto desde la direccion IP 192.168.0.5 al usuario "root" para la base de datos "administracion" GRANT ALL PRIVILEGES ON administracion.* TO root@192.168.0.5 FLUSH PRIVILEGES; Para mas informacion consulte los siguientes temas:

Monday, April 30, 2007

DATEADD en PostgreSQL 8

Actualmente me ecuentro migrando un portal de MS SQL Server a Postgress. Me encontre con un tema que me demostro una vez mas el poder de PostgreSQL sobre Microsoft SQL Server 2000/2005. En Microsoft SQL Server existe la funcion DATEADD , que permite agregar partes de datetime( dias,meses,años,minutos,segundos) una fecha existente, por ejemplo: Esta function en SQL Server: select getdate() as FechaActual, dateadd(day,2,getdate()) as DiasDespues Da como resultado: FechaActual DiasDespues ------------------------------------------------------ ------------------------------------------------------ 2007-05-01 08:19:22.693 2007-05-03 08:19:22.693 (1 filas afectadas) En PostgreSQL no existe el DATEADD, existe el operador de suma el cual actua entre operandos de tipo timestamp e interval. select now() as FechaActual, now() + cast('2 day' as interval) as DiasDespues Una vez mas me asombra el poder de PostgreSQL como base de datos orientado a objetos sobre T-SQL que es un lenguage estructurado... bueno, SQL es Structured Query Language jejeje.