Cómo integrar PostgreSQL – PostGIS en R

La combinación de PostgreSQL y R permite aprovechar el poder y la eficiencia de PostgreSQL y la gran funcionalidad analítica de R. La unión de ambos permite a los usuarios la realización de análisis espaciales muy potentes.

El objetivo de este post es mostrar cómo podemos integrar PostgreSQL y PostGIS en R a través de RStudio.

integracion PostgreSQL PostGIS en R

Configuración de PostgreSQL

El primer paso es asegurarnos de que tenemos todos los programas necesarios instalados. Además de R y RStudio, será necesario instalar PostgreSQL. Se puede obtener la última versión disponible aquí.

En este post, las versiones utilizadas son:

R

3.6.1

RStudio

1.2.5033

PostgreSQL

12

Para el tutorial, se ha creado mediante PgAdmin4 una base de datos PostgreSQL con la extensión PostGIS y se le han añadido una tabla denominada roads con datos espaciales.

Conexión a una base de datos PostgreSQL – PostGIS desde R

Una vez se esté configurado correctamente PostgreSQL, se puede empezar a trabajar desde RStudio. Para ello, se deben instalar una serie de paquetes: DBI, RPostgres y sf.

  • El paquete DBI proporciona funciones para el acceso a varios Sistemas de Gestión de Bases de Datos. Actualmente, da soporte para PostreSQL, MariaDB, SQLite, GoogleBigQuery y MySQL.
  • El paquete RPostgres introduce una interfaz compatible con DBI para gestionar bases de datos postgres y la extensión espacial PostGIS en R.
  • El paquete sf para la representación de objetos geográficos en R. Para más información pueden consultarse post anteriores.

Para poder establecer una conexión es necesario conocer seis parámetros:

  • Controlador: nombre del driver para la conexión.  Se puede obtener más información en la sección de Controladores.
  • Servidor: la ruta de red al servidor de la base de datos.
  • Base de datos: el nombre de la base de datos a la que se quiere establecer la conexión.
  • Usuario: el ID de red del usuario o la cuenta local del servidor.
  • Contraseña: la contraseña de la cuenta.
  • Puerto: generalmente se establece en 5432.

Listar tablas de una Base de Datos en R

El paquete DBI incluye la función dbListTables(conexión) que permite listar todas las tablas que contiene la base de datos a la que se ha realizado la conexión:

El resultado que se muestra en consola es:

Se mostrarán todas las tablas que contiene la base de datos en cuestión.

Con la función st_read del paquete sf, podemos «leer» y crear una variable con los datos de la tabla de la BD que deseemos en R, para realizar cualquier tipo de análisis:

Obteniendo por consola:

Lanzar consultas desde RStudio

Existen una serie de funciones que nos permiten lanzar consultas directamente contra la base de datos y visualizar sus resultados:

  • dbSendQuery(conexión, consulta) para lanzar consultas.
  • dbFetch(resultado, n) para obtener los nelementos (filas) del conjunto de resultados.
  • dbClearResult(resultado) para limpiar los resultados obtenidos de una consulta.

hacerqueris

Se puede lanzar cualquier consulta que se lanzaría directamente desde PgAdmin o desde otro gestor de base de datos.

Cerrar conexión con la base de datos

Para finalizar, es importante asegcerrar la conexión a la base de datos. Para ello, se emplea la función dbDisconnect(conexión).

# 8.0 Cerrar conexión dbDisconnect(con)

Código completo

El código completo del tutorial es el siguiente:

 

Let’s connect!

Date de alta en nuestra newsletter
y recibe este ebook gratuito

Y una vez al mes recibirás las últimas novedades del sector GIS y de nuestros cursos

3 comentarios en “Cómo integrar PostgreSQL – PostGIS en R”

  1. Buenos días,
    gracias por el post. ¿Es posible hacer una copia en local de mi base de datos desde R?
    Lo he intentado con dbSendUpdate(con, «CREATE DATABASE mydatabasecopy WITH owner=admin template=mydatabase;») pero no me deja porque me dice que hay 1 otra sesión utilizando la base de datos, pero si hago dbDisconnect(con) tampoco me deja porque me dice que no estoy conectada.
    Muchas gracias de antemano.

    Responder
  2. Esta genial la muestra. Mi duda es como importar un dataframe que trabajas en R a Postgres ¿Se puede? que quede dentro de tu base de datos de Postgres

    Responder

Deja un comentario