Articles

Cómo empezar con PostgreSQL en Mac OSX

I. Introducción

El otro día empecé un nuevo proyecto Node.js y quería usar PostgreSQL como backend de la base de datos. Si estás aquí leyendo este tutorial, ¡espero que estés intentando hacer lo mismo!

Este tutorial te enseñará a instalar, configurar y utilizar PostgreSQL en MacOSX 10.7 (Lion) y superior. Usted necesitará al menos un nivel básico de comodidad en el uso de la línea de comandos utilizando el terminal incorporado en MacOSX, iTerm2, Zsh, o algo similar. Cuando terminemos, usted:

  • Tendrá una instancia de PostgreSQL 9.5.4 en funcionamiento
  • Sabrá crear y gestionar bases de datos y usuarios
  • Sabrá utilizar tanto las herramientas de línea de comandos como las de interfaz de usuario para gestionar su base de datos

II. Acerca de PostgreSQL

PostgreSQL es un Sistema de Gestión de Bases de Datos Relacionales de Objetos que cumple con ACID, o ORDBMS (¡un buen bocado!). En pocas palabras, es una base de datos que permite relacionar una pieza de datos con otra (por lo tanto, «relacional»). Funciona en casi todos los sistemas operativos, incluidos Linux, Unix y Windows. Es de alto rendimiento y altamente escalable, capaz de manejar enormes cantidades de datos y aplicaciones de Internet de alta carga con miles de usuarios simultáneos. Su combinación única de simplicidad y potencia lo convierte en una opción popular para usuarios individuales y pequeñas empresas, pero también para empresas como Yahoo, Uber, Disqus y TripAdvisor.

Postgres soporta una larga lista de características de bases de datos, incluyendo varias características empresariales. Aparte de las características estándar de las bases de datos relacionales, algunas de las características más notables de Postgres son:

  • Replicación en flujo
  • Esquemas
  • Objetos definidos por el usuario como operadores, tipos de datos y funciones
  • Transacciones anidadas
  • Herencia de tablas
  • Partición
  • Varios tipos de datos inusuales, como Dinero, Geometría, direcciones IP, JSON y rangos de datos.
  • Puede ejecutar procedimientos almacenados en más de una docena de lenguajes de programación, incluyendo Java, Perl, Python, Ruby y C/C++.
  • Debido a su soporte de primera clase para JSON, Postgres es a menudo una buena alternativa a las bases de datos «No-SQL» como MongoDB. Lea más sobre PostgreSQL

    III. Cómo empezar

    Lo primero que vamos a hacer es instalar Postgres. Hay dos maneras principales de conseguir Postgres en su máquina:

  1. Usando un instalador gráfico como BigSQL o Postgres.app
  2. Usando un gestor de paquetes para instalar a través de la línea de comandos.
  3. Puede elegir cualquier opción que sea adecuada para usted. Para este tutorial, vamos a ver cómo instalar en la línea de comandos.

    1. Conseguir Homebrew

    Para instalar PostgreSQL en la línea de comandos vamos a utilizar un gestor de paquetes llamado Homebrew. Si ya tienes Homebrew instalado, puedes saltar a Instalar PostgreSQL. De lo contrario, sigamos.

    Comencemos copiando y pegando el siguiente comando en nuestra línea de comandos:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    No te preocupes por lo que hace todo eso-siempre y cuando estés usando MacOSX 10.7 o superior, el intérprete de Ruby viene preinstalado. El resto de este comando (el comando curl) es una herramienta para hacer peticiones web desde tu línea de comandos. Este descarga el script en la URL dada, y luego el intérprete de Ruby lo ejecuta. Deberías ver una salida similar a la siguiente:

    servidor Postgres
    Instalando Homebrew

    Ahora que tenemos Homebrew, podemos proceder a instalar Postgres!

    2. Instalando Postgres

    Ahora que tenemos Homebrew, instalar PostgreSQL es muy fácil. Ejecuta el siguiente comando para instalar PostgreSQL usando Homebrew:

    brew install postgresql

    Deberías ver entonces la siguiente salida:

    servidor Postgresql
    *Instalando *

    Homebrew se encarga de resolver las dependencias de Postgres, que en este caso son OpenSSL y Readline. También se encarga de saber cuáles son las últimas versiones, dónde conseguirlas y cómo desempaquetarlas. Lo más importante son las instrucciones, fáciles de olvidar, que se encuentran al final de la instalación:

    servidor Postgresql
    Inicio de los servicios

    Vamos a iniciar Postgres en funcionamiento, y a asegurarnos de que Postgres se inicie cada vez que nuestro ordenador arranque. Ejecuta el siguiente comando:

    pg_ctl -D /usr/local/var/postgres start && brew services start postgresql

    Por último, asegurémonos de que Postgres está instalado y en ejecución. Comprobemos qué versión se está ejecutando:

    postgres -V

    Tu salida debería ser como la siguiente:

    servidor Postgresql
    Postgres instalado

    ¡Ya está! Ya tienes instalado Postgres. Ahora, por fin, estamos listos para aprender a usarlo

    3. Configurar Postgres

    Postgres se esfuerza mucho por ser utilizable nada más sacarlo de la caja sin que tengas que hacer nada. Por defecto, crea automáticamente el usuario postgres. Veamos qué otros usuarios ha creado. Empecemos usando la utilidad psql, que es una utilidad instalada con Postgres que permite realizar funciones administrativas sin necesidad de conocer sus comandos SQL reales.

    Comienza introduciendo lo siguiente en la línea de comandos:

    psql postgres

    (Es posible que necesites usar sudo psql postgres para que este comando funcione, dependiendo de cómo esté configurado tu sistema).

    Verás una salida como la siguiente:

    servidor postgresql
    salida de psql

    Esa es la línea de comandos psql. Ahora podemos introducir un comando para ver qué usuarios están instalados:

    postgres=# \du

    De tapadillo, este comando ejecuta una consulta SQL (ya aprenderemos sobre ellas más adelante) que obtiene todos los usuarios de la base de datos. En mi máquina, devuelve lo siguiente:

    servidor postgresql
    lista de usuarios de Postgres

    Vemos el usuario de Postgres que he mencionado, pero ¿qué es ese otro usuario, engineerapart? Esta es una de las cosas que hace Postgres para facilitarte la vida cuando lo instalas por primera vez. En la mayoría de los sistemas operativos basados en Linux, el nombre de usuario que utilizan por defecto todos los procesos es aquel con el que has iniciado la sesión. Usted no tiene que pasar su nombre de usuario a la mayoría de los programas. Pero si un programa en particular, como Postgres, no tiene su nombre de usuario configurado, ¡fallará!

    Así que cuando Postgres se instala, crea automáticamente un usuario de base de datos que coincide con su nombre de usuario, para que pueda empezar de inmediato.

    A. Creación de usuarios

    Postgres no gestiona directamente usuarios o grupos, como la mayoría de los modelos de permisos estándar. En su lugar, gestiona directamente lo que denomina roles.

    Aunque es ciertamente conveniente que Postgres establezca un conjunto de usuarios por defecto para usted, es una muy mala idea utilizarlos para cualquier cosa que no sea el desarrollo local, porque son muy conocidos y, lo que es más importante, son cuentas de superusuario: pueden hacer cualquier cosa, incluso eliminar bases de datos. Esto no es seguro para una base de datos de producción: necesitamos usuarios con permisos limitados. Entonces, ¿cómo creamos y utilizamos nuevos usuarios (roles)?

    Hay dos formas principales de hacerlo:

  • Ejecutar directamente la CREATE ROLE consulta SQL en la base de datos
  • Utilizar la utilidad createuser que viene instalada con Postgres (que no es más que un wrapper para ejecutar CREATE ROLE).

Veamos ambos casos.

A.1. CREATE ROLE con psql

La sintaxis básica de CREATE ROLE tiene el siguiente aspecto:

CREATE ROLE username WITH LOGIN PASSWORD 'quoted password' 

Donde username es el usuario que quieres crear, y la contraseña va al final entre comillas. Más adelante veremos las opciones.

Empecemos por entrar de nuevo en nuestra útil herramienta psql:

servidor postgresql
salida de psql

Mientras estamos aquí, vamos a establecer la contraseña de la cuenta por defecto postgrespor defecto, no tiene contraseña.

postgres=# \password postgres

Se te pedirá que introduzcas la contraseña y la confirmes. Ahora vamos a crear nuestro nuevo rol:

postgres=# CREATE ROLE patrick WITH LOGIN PASSWORD 'Getting started'; postgres=# \du

Tu salida debe ser como la siguiente:

servidor postgresql
psql CREATE ROLE

Espera. La lista de atributos del usuario patrick está completamente vacía. ¿Por qué?

Así es como Postgres gestiona de forma segura los valores por defecto. Este usuario puede leer cualquier base de datos, tabla o fila para la que tenga permisos, pero nada más: no puede crear ni gestionar bases de datos y no tiene poderes de administrador. Esto es algo bueno. Ayuda a mantener tu base de datos segura.

Así que vamos a añadir el permiso CREATEDB a nuestro nuevo usuario para permitirle crear bases de datos:

postgres=# ALTER ROLE patrick CREATEDB; postgres=# \du postgres=# \q # quits

Tu salida debería ser así:

servidor postgresql
psql ALTER ROLE

Documentación para CREATE ROLE

Documentación para ALTER ROLE

A.2. La utilidad createuser

Postgres viene con una serie de utilidades de línea de comandos muy útiles que facilitan mucho el proceso anterior. En lugar de iniciar sesión en psql, ejecutar consultas SQL, y la necesidad de conocer los detalles de las declaraciones de consulta, puede utilizar una interfaz de línea de comandos familiar para hacer las mismas tareas. Algunas de estas herramientas son:

  • createuser: crea un usuario
  • createdb: crea una base de datos
  • dropuser: elimina un usuario
  • dropdb: elimina una base de datos
  • postgres: ejecuta el propio servidor SQL (¡ya vimos ese arriba cuando comprobamos nuestra versión de Postgres!)
  • pg_dump: vuelca el contenido de una sola base de datos a un archivo
  • pg_dumpall: vuelca todas las bases de datos a un archivo
  • psql: ¡lo reconocemos!

Lista completa de aplicaciones cliente

Así que vamos a utilizar createuser para hacer lo mismo que hicimos arriba: crear el usuario patrick:

createuser patrick

Esto crea el usuario patrick con todos los atributos por defecto, de nuevo, sin la posibilidad de crear bases de datos. Si quisiéramos la capacidad de crear una base de datos, se ejecutaría lo siguiente en su lugar:

createuser patrick --createdb

Desgraciadamente, no hay ninguna herramienta de línea de comandos para lograr lo mismo que ALTER ROLE. Para cambiar los usuarios una vez creados, hay que utilizar psql.

Documentación para createuser

A.3. Resumen

¡Eso es todo! Ahora nuestro nuevo usuario está configurado y puede crear bases de datos. Empecemos a gestionar nuestra base de datos con ese nuevo usuario.

B. Creación de una base de datos

Al igual que la creación de un usuario, hay dos formas de crear una base de datos:

  • Ejecutando comandos SQL directamente con psql
  • La utilidad de línea de comandos createdb
  • B.1. CREATE DATABASE con psql La sintaxis SQL básica para crear una base de datos en PostgreSQL es:

    CREATE DATABASE databasename;

    Vamos a realizar el mismo proceso que en el caso anterior:

    psql postgres -U patrick

    servidor de Postgreql
    inicio de sesión de usuario de psql

    Notarás que el prompt es ligeramente diferente – el # ha cambiado a un >. Esto indica que ya no estás usando una cuenta de Super Usuario.

    postgres=> CREATE DATABASE super_awesome_application;

    Documentación para CREATE DATABASE

    Una vez hecho esto, necesitas añadir al menos un usuario que tenga permiso para acceder a la base de datos (aparte de los super usuarios, que pueden acceder a todo). Para ello, vamos a aprender un nuevo comando SQL:

    postgres=> GRANT ALL PRIVILEGES ON DATABASE super_awesome_application TO patrick; postgres=> \list postgres=> \connect super_awesome_application postgres=> \dt postgres=> \q

    Documentación para GRANT

    Aquí, también os he mostrado unos cuantos comandos nuevos que se pueden utilizar con psql:

    • \list: lista todas las bases de datos de Postgres
    • \connect: conecta con una base de datos específica
    • \dt: listar las tablas de la base de datos actualmente conectada

    servidor postgresql
    psql CREATE DATABASE

    Y eso es todo.

    Ya podemos crear, leer, actualizar y borrar datos en nuestra super_awesome_application base de datos con el usuario patrick!

    B.2. La utilidad createdb

    Al igual que en el caso anterior, la creación de una base de datos mediante createdb es más sencilla, con la salvedad de que no se puede gestionar la base de datos una vez creada. Para ello, se requiere psql.

    createdb super_awesome_application -U patrick

    Aquí, he invocado la utilidad createdb y le he pasado el usuario patrick para que se conecte a la base de datos. Es ese usuario cuyos permisos se comprobarán para ejecutar el comando de creación.

    Es muy, muy raro que quieras cambiar una base de datos después de haberla creado. Lo único que puedes cambiar es su nombre y algunos parámetros de configuración. Cambiar los parámetros de configuración (como la colación o los conjuntos de caracteres) tiene implicaciones que van mucho más allá de este tutorial. Sin embargo, podemos cambiar el nombre si lo deseamos.

    De nuevo, no hay ninguna herramienta de línea de comandos para cambiar una base de datos una vez creada. Debemos utilizar psql:

    psql postgres -U patrick postgres=> ALTER DATABASE super_awesome_application RENAME TO even_more_awesome_application; postgres=> \q

    Y la salida debe ser similar a:

    servidor postgresql
    psql ALTER DATABASE

    Documentación para ALTER DATABASE

    B.3. Resumen

    ¡Ya está! Hemos creado nuestro usuario, hemos creado una base de datos y le hemos dado permisos al usuario para usar la base de datos. Por el camino, hemos aprendido a utilizar algunas de las herramientas de línea de comandos de Postgres preinstaladas. Esto nos dará una gran base para entender un comportamiento más complejo en la siguiente sección.

    Ahora vamos a echar un vistazo a algunas herramientas gráficas populares para gestionar PostgreSQL en MacOSX.

    IV. GUIs populares para PostgreSQL en MacOSX

    Hasta ahora, nos hemos centrado bastante en las herramientas de línea de comandos para gestionar nuestra instalación de Postgres. Sin embargo, para algunas cosas, eso es laborioso y requiere mucho tiempo: Por ejemplo, si quieres una vista rápida de los datos que tienes en una tabla, sacar eso de las herramientas de línea de comandos lleva más tiempo que usar una GUI. Si lo haces 100 veces al día mientras desarrollas, ese tiempo empieza a sumar!

    Así que, naturalmente, un grupo de desarrolladores emprendedores ha construido algunas GUIs bastante impresionantes que se pueden utilizar para gestionar tus servidores Postgres locales (¡y remotos!). Vamos a echar un vistazo a algunos de los más populares y fáciles de usar.

    1. Postico (https://eggerapps.at/postico/)

    Postico es un moderno cliente Postgres para OSX, construido por el mismo desarrollador que construyó Postgres.app (mencionado anteriormente). Es gratuito, pero se puede comprar una licencia para desbloquear características de potencia adicionales. Este es el GUI que utilizo para manejar Postgres porque está construido específicamente para Mac y tiene una hermosa y muy fácil de usar (pero poderosa) UI. También incluye un editor SQL para consultas complejas.

    Para empezar con Postico, simplemente:

    • Descargarlo en https://eggerapps.at/postico/descargar/
    • Hacer doble clic en el archivo Zip descargado en el Finder
    • Arrastrar el archivo extraído Postico.app a tu carpeta de Aplicaciones
    • Buscar Postico en el Launchpad e iniciar la app.

    Verás una pantalla parecida a la siguiente (sin ninguna conexión a la base de datos configurada):

    servidor postgresql
    Postico

    Para conectarte a tu base de datos local:

    • Pulsa en ‘Nuevo Favorito’
    • Dale un nombre fácil de recordar
    • Puedes dejar los valores por defecto introducidos en las casillas
    • Si has cambiado la postgres contraseña del usuario anterior, introdúcela en la casilla de la contraseña
    • Despliega el Options y selecciona «Mostrar todas las bases de datos» – ¡de lo contrario te preguntarás dónde están tus bases de datos!

    servidor postgresql
    Postico nuevo favorito

    • Haz clic en ‘Done’ para guardarlo
    • Luego haz clic en el botón ‘Connect’.
    • ¡Ya está!

    servidor postgresql
    Postico conectado

    Lee la Documentación de Postico para aprender a usar las increíbles características de Postico!

    2. pgAdmin (https://www.pgadmin.org/)

    pgAdmin es el más antiguo de los GUIs de Postgres, su primera versión fue lanzada apenas unos meses después del primer lanzamiento de Postgre en 1996. Después de haber sido reescrito varias veces, puede ejecutarse en Linux, MacOSX y Windows, y cuenta con potentes herramientas de gestión de bases de datos, incluyendo un editor de SQL con resaltado de sintaxis. Diseñado para ejecutarse tanto en máquinas cliente como en servidores desplegados, pgAdmin es capaz de manejar casos avanzados que Postico no puede.

    Para empezar con pgAdmin, simplemente:

    • Descargarlo en https://www.pgadmin.org/download/macos4.php
    • Haga doble clic en el archivo de imagen de disco (DMG) descargado en su carpeta de Descargas
    • Arrastre la app pgAdmin 4 a su carpeta de Aplicaciones
    • Busque pgAdmin en Launchpad e inicie la app.
      • Verás una pantalla parecida a la siguiente:

        servidor pggresql
        pgAdmin

        Para conectar con tu base de datos local:

        • Haga clic con el botón derecho del ratón en ‘Servidores’ y seleccione Crear => Servidor
        • Déle un nombre fácil de recordar y desmarque la casilla «Conectar ahora»
        • Para la dirección del servidor, introduzca localhost
        • Puede dejar los valores por defecto introducidos en las casillas

        • Si ha cambiado la postgres contraseña del usuario anterior, introdúcela en la casilla de contraseña
          • servidor postgresql
            Postico nuevo favorito

            • Haz clic en ‘Guardar’ para guardarlo
            • Tu nuevo servidor aparecerá en la lista de servidores
            • Haz clic en tu nuevo servidor e introduce la contraseña una vez más para conectarte
            • ¡Ya está!

            servidor postgresql
            pgAdmin conectado

            ¡Lee la documentación de pgAdmin para aprender a usar las increíbles funciones de Postico!

            3. Navicat (https://www.navicat.com/products/navicat-for-postgresql)

            Navicat es sin duda una de las mejores GUIs de gestión a nivel empresarial para PostgreSQL. No sólo cuenta con un editor de SQL y base de datos, visualización y gestión de tablas y filas, Navicat también cuenta con un Modelador de Datos que le permite diseñar y depurar gráficamente sus esquemas de base de datos. Sin embargo, aunque Navicat viene con una prueba gratuita de 14 días, sus licencias oscilan entre los 100 y los 250 dólares.

            Para empezar con Navicat, simplemente:

            • Descárguelo en https://www.navicat.com/download/navicat-for-postgresql
            • Haga doble clic en la imagen de disco descargada (navicat112pgsqlen.dmg) en su carpeta de Descargas
            • Arrastre la aplicación Navicat a su carpeta de Aplicaciones
            • Busque Navicat en Launchpad y lance la aplicación.
              • Verás una pantalla parecida a la siguiente:

                servidor postgresql
                Navicat

                Para conectar con tu base de datos local:

                • Haga clic en «Conexión»
                • Rellene el cuadro de diálogo proporcionado utilizando la misma información anterior
                • Haga clic en «Aceptar» para guardar la conexión.
                • Haga doble clic en la nueva conexión en la lista de la izquierda, y ya está conectado. Eso es todo!

                servidor postgresql
                Conecta Navicat

                Lee el Manual de Navicat Online para aprender a utilizar las increíbles características de Postico!

                V. Resumen

                PostgreSQL es una de las principales bases de datos relacionales del mundo, utilizada por individuos, pequeños negocios y grandes empresas por igual. A pesar de su alto rendimiento y su potente conjunto de características, es increíblemente fácil de empezar con él. En este tutorial, hemos aprendido a:

                • Instalar el servidor PostgreSQL en MacOSX usando Homebrew
                • Utilizar las herramientas de línea de comandos de Postgres para configurar Postgres:
                  • Utilizar la herramienta de línea de comandos psql para ver información sobre la base de datos
                  • Crear un nuevo usuario utilizando psql y createuser
                  • Cambiar la contraseña de un usuario
                  • Crear una base de datos utilizando psql y createdb
                  • Cambiar el nombre de una base de datos
                  • Otorgar permisos de acceso en una base de datos a un usuario específico
                • También hemos echado un breve vistazo a algunas populares herramientas de gestión basadas en GUI-basado en herramientas de gestión para Postgres, incluyendo Postico, pgAdmin y Navicat.

                  ¡Buena suerte! Que te diviertas con Postgres

                  VI. Referencias

                  Página web de PostgreSQL
                  Documentación de PostgreSQL

                  • Lista completa de aplicaciones cliente
                  • Documentación para createuser.
                  • Documentación para createdb
                  • Documentación para CREATE ROLE
                  • Documentación para ALTER ROLE
                  • Documentación para CREATE DATABASE
                  • Documentación para ALTER DATABASE
                  • Documentación para GRANT.

                  Clientes populares de la GUI de Postgres

                  • Documentación de Postico
                  • Documentación depgAdmin
                  • Manual en línea de Navicat

                  .

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *