Integraci贸n con otros lenguajes

16/33

Lectura

Conectores

Como la mayor铆a de las bases de datos, PostgreSQL cuenta con conectores para diferentes lenguajes de programaci贸n, de tal forma que si trabajas con Python, PHP, Java, JavaScript y todos sus frameworks, exista una forma de extraer datos de PostgreSQL y posteriormente utilizar las propiedades de los lenguajes procedurales para transformar y utilizar los datos.

El lenguaje est谩ndar utilizado en bases de datos relacionales es SQL (Structured Query Language), un lenguaje que tiene una estructura sumamente 煤til para hacer solicitudes de datos, en especial tomando como abstracci贸n un dise帽o tabular de datos. Sin embargo, carece de estructuras de control y otras abstracciones que hacen poderosos a los lenguajes procedurales de programaci贸n.

PL/pgSQL

Como respuesta a los puntos d茅biles de SQL como est谩ndar, PostgreSQL respondi贸 originalmente creando un lenguaje propio llamado PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) que es literalmente un superset de SQL que incluye propiedades de un lenguaje estructurado que, por un lado, nos permite crear funciones complejas y triggers; y, por el otro lado, agrega estructuras de control, cursores, manejo de errores, etc.

Otros lenguajes

Sin embargo, en muchos sentidos, aunque PL/pgSQL ayuda en los casos m谩s gen茅ricos para generar estructuras y funcionalidades m谩s complejas, no se compara con lenguajes completamente independientes y no ligados directamente a una base de datos.

La respuesta sin embargo tampoco es los conectores normales que, si bien resuelven la parte de un lenguaje m谩s complejo, a帽aden por otro lado una separaci贸n de la base de datos, ya que debe correr en un servidor separado y hacer llamadas entre ellos con la latencia como un colateral.

Para mitigar estos problemas tomando lo mejor de ambos mundos, los desarrolladores de PostgreSQL se dedicaron a hacer implementaciones de diversos lenguajes a manera de plugin.

C

La biblioteca que permite al lenguaje C ejecutarse en PostgreSQL es llamada libpq y es una interfaz de programaci贸n que permite extender y hacer de interfaz para permitir a otros lenguajes ejecutarse en esta base de datos.

Puedes encontrar m谩s informaci贸n de esta interfaz en el siguiente link:

https://www.postgresql.org/docs/11/libpq.html.

PL/Tcl

Tcl (Tool Command Language) es un lenguaje dise帽ado con la simpleza en mente y su paradigma consiste en que todo en 茅l es un comando, incluyendo la estructura del lenguaje que, sin embargo, son suficientemente flexibles para poderse sobreescribir, haci茅ndolo un lenguaje sumamente extensible.

Todo lo anterior es ideal para la integraci贸n con el manejador de PostgreSQL ya que permite elaborar comandos para ejecutar las sentencias SQL y extenderlas facilmente.

Si quieres leer m谩s del tema, puedes hacerlo en el siguiente link:

https://www.postgresql.org/docs/11/pltcl.html.

PL/Perl

Perl es un lenguaje de programaci贸n que implementa una estructura de bloques de c贸digo y que toma inspiraci贸n de programas como C, sh, AWK, entre otros. Y es especialmente bueno para el tratamiento de cadenas de texto. Sin embargo, no se encuentra limitado como un lenguaje de script.

Dada la propiedad de englobar funcionalidad en forma de bloque y de la rapidez y facilidad con la que trabaja con datos tipo cadena, este lenguaje es ideal para el tratamiento de informaci贸n de una base de datos relacional.

Para conocer m谩s de la implementaci贸n de este lenguaje con PostgreSQL puedes leer el siguiente link:

https://www.postgresql.org/docs/11/plperl.html.

PL/Python

Python, al ser de los lenguajes de programaci贸n m谩s extendidos entre programadores de servicios Backend, es una implementaci贸n particularmente interesante para PostgreSQL.

Python es un lenguaje de programaci贸n fuerte en tratamiento de estructura de datos y tiene un paradigma m煤ltiple con fuertes componentes orientados a objetos, estructurados y una fuerte influencia del paradigma funcional.

Parte de sus fortalezas son sus implementaciones de funciones map, reduce y filter en conjunto con list comprehensions, sets, diccionarios y generadores.

Dadas las propiedades nativas para manejar estructuras de datos complejas, es un lenguaje ideal para manejar la salida de un query SQL.

La implementaci贸n de Python para PostgreSQL te permite crear funciones complejas en un lenguaje completo y popular sin tener que utilizar PL/pgSQL. Puedes ver un ejemplo a continuaci贸n de la misma funci贸n en PL/pgSQL y PL/Python.

PL/pgSQL

CREATE FUNCTION pgmax (a integer, b integer)
RETURNS integer
AS $$
BEGIN
   IF a > b THEN
       RETURN a;
   ELSE
       RETURN b;
   END IF;
END
$$ LANGUAGE plpgsql;

PL/Python

CREATE FUNCTION pymax (a integer, b integer)
RETURNS integer
AS $$
   if a > b:
       return a
   return b
$$ LANGUAGE plpythonu;
 
CREATE EXTENSION plpythonu;
SELECT pgmax(200,9);

Para instalar el lenguaje Python en PostgreSQL, una vez instaladas las bibliotecas apropiadas para cada Sistema Operativo, es necesario ejecutar el siguiente query:

CREATE EXTENSION plpythonu

Si quieres profundizar m谩s en esta implementaci贸n puedes encontrar m谩s informaci贸n aqu铆:

https://www.postgresql.org/docs/11/plpython.html.

Aportes 20

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Para los que, al igual que yo, tuvieron problemas al ejecutar la consulta:

CREATE EXTENSION plpythonu

Antes de instalar la extensi贸n hay que asegurarse de tener Python y haber instalado el paquete postgresql-plpython.
En mi caso estoy trabajando con el contenedor 鈥減ostgres鈥 en Docker, mismo que no trae instalado Python. Lo que hice fue:

#Para instalar Python en su versin 3.7
apt-get install python3  

#Para instalar el paquete postgresql-plpython
#En mi caso tengo aversi贸n 13 de pgsql
#La nomenclatura deber铆a estar en funci贸n dela versin de Python y de la versin de pgsql con la que se trabaja
apt-get install postgresql-plpython3-13

Hecho eso ya se puede ejecutar la consulta:

CREATE EXTENSION plpython3u
#Con el 3 casi al final para denotar que se trabaja con la versin 3.x de python

INSTALACI脫N EN WINDOWS DE POSTGRESQL + Python3 + plpython3u

  1. Ir a
C:\Program Files\PostgreSQL\[version]\doc\installation-notes.html

Revisar que versi贸n de Python se us贸 para compilar tu versi贸n de PostgreSQL, en mi caso es Python3鈥7

  1. Buscar esa versi贸n e instalarla:

Python para Windows

  1. Registrar en el PATH las carpetas
C:\Users\[usuario]\AppData\Local\Programs\Python\Python37

C:\Users\[usuario]\AppData\Local\Programs\Python\Python37\scripts
  1. Copiar el archivo python37.dll de:
C:\Users\[usuario]\AppData\Local\Programs\Python\Python37

en

C:\Windows\System32

Fuente:
stackoverflow

Con raz贸n PostgreSQL presume de ser el mejor manejador de bases de datos.

Hola compa帽eros

No puedo correr la PL/Python. Postgre se desconecta cada que quiero correr el bloque de codigo

Ya cree la extensi贸n y no hubo ningun error.

Alguna ayuda?
![]()

Para los que tengan Windows y hayan seguido las instrucciones de los otros compa帽eros, y a煤n as铆 sale error, intenten la segunda opci贸n:

CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;

Con la primera l铆nea tengo el error:

ERROR:  no se pudo acceder al archivo 芦$libdir/plpython2禄: No such file or directory
SQL state: 58P01

La segunda me funcion贸 bien.

Necesito tu ayuda!, No puedo agregar ningun lenguaje me dice que no puede ser encontrado este archivo por ejemplo plpython3.dll, pero SI ESTA! no se porque no puedo instalar mi primera extencion con python

ERROR: no se pudo cargar la biblioteca 芦C:/Program Files/PostgreSQL/11/lib/plpython3.dll禄: The specified module could not be found.

Muy completo en verdad

Muy buenas integraciones, buenos datos lo cual me permite ver el gran potencial que tiene postgreSQL

Super, no sab铆a que Postgresql podia trabajar con Python

Para los que no les vale, comparto el comentario de un compa帽ero, deber铆a salirles igual que a mi en el feed de comentarios pero bueno. Aqu铆 est谩. Me funcion贸, espero igual a ustedes. Gracias al compa帽ero que lo comparti贸.

INSTALACI脫N EN WINDOWS DE POSTGRESQL + Python3 + plpython3u

Ir a
C:\Program Files\PostgreSQL[version]\doc\installation-notes.html
Revisar que versi贸n de Python se us贸 para compilar tu versi贸n de PostgreSQL, en mi caso es Python3鈥7

Buscar esa versi贸n e instalarla:
Python para Windows

Registrar en el PATH las carpetas
C:\Users[usuario]\AppData\Local\Programs\Python\Python37

C:\Users[usuario]\AppData\Local\Programs\Python\Python37\scripts
Copiar el archivo python37.dll de:
C:\Users[usuario]\AppData\Local\Programs\Python\Python37
en

C:\Windows\System32
Fuente:
stackoverflow

驴Se pueden importar librer铆as de python dentro del bloque?, 驴Se podr铆an generar archivos desde el bloque de python y guardarlos en el disco?

Instalado en WSL 2

Excelente y muy potente

No tenia conocimiento de esto, es muy interesante.

Excelente clase y con los recursos ah铆 para consultarlos.

Esto es incre铆ble el poder que puede tener combinar diferentes lenguajes dentro del motor de base de datos 馃槃

genial mucha informaci贸n valiosa lo de estos lenguajes para potenciar Postgres!

Sin duda la funcionalidad de integrar otros lenguajes procedurales hace a este motor super funcional y robusto, por eso me entusiasma aprender mas sobre PostGreSQL

Que interesante poder usar otros lenguajes en el motor de bases de datos de PostgreSQL, me encantar铆a ver muchas m谩s aplicaciones de Python dentro de PostgreSQL, suena muy interesante!

Sin duda esto le da un plus importante a PostgreSQL, esto su compatibilidad con servicios de AWS, lo ponen hoy como mi favorito.