Entradas

Mostrando las entradas de enero, 2018

Cómo respaldar y restaurar bases de datos en PostgreSQL

En este artículo veremos cómo respaldar y restaurar bases de datos. Para respaldar una base de datos en particular, podemos utilizar la herramienta pg_dump ; su sintáxis básica es la siguiente: => pg_dump [options] database_name > file_of_backup.sql Dentro de las opciones, podemos especificar el host, usuario, contraseña, formato del archivo, etc. Por lo general, el respaldo lo hacemos en un archivo .sql. Cuando la base de datos es demasiado grande, tenemos opciones para una salida comprimida (.tar, .tar.gz, etc). Ejemplo práctico: respaldemos la base de datos "prueba", la cual está en nuestro servidor local. => pg_dump -h localhost -U postgres -W -d prueba > prueba_backup.sql -h: se especifica el host -U: se especifica el usuario -W: se especifica que solicite la contraseña antes de realizar el dump -d: se especifica la base de datos >: indicamos que se vuelque en el archivo prueba_backup.sql De esta manera, tenemos un respaldo completo (incl...

Cómo crear un usuario de sólo lectura en PostgreSQL

En este artículo, veamos cómo crear un usuario de solo lectura en el motor PostgresSQL. Las consideraciones que debemos tener en este punto, son los permisos que otorga Postgres por defecto, particularmente al usuario/grupo/palabra clave public . Ver detalle en la siguiente entrada  Permisos en PostgreSQL. Manos al código (trabajando desde PSQL). Creemos una base de datos para trabajar: => CREATE DATABASE prueba; Ahora creemos un usuario para jugar: => CREATE USER pruebauser WITH PASSWORD 'Una password fuerte por favor'; Ahora, empecemos a tunear los permisos. Por seguridad, revocamos los permisos al public para que ningun usuario tenga acceso a la base de datos, salvo los que especifiquemos. => REVOKE ALL ON DATABASE prueba FROM public; Listo, paso siguiente es darle privilegios a nuestro usuario de sólo lectura para que pueda conectarse a la base de datos: => GRANT CONNECT ON DATABASE prueba TO pruebauser; El usuario ya puede con...

Permisos en PostgreSQL

En el siguiente artículo, veamos cómo Postgres gestiona los permisos sobre los objetos. Antes de ir directamente a los GRANT/REVOKE, tenemos que tener en cuenta algunas consideraciones respecto a los permisos por defecto que brinda Postgres. Owner : Cuando se crea un objeto de base de datos, se le asigna un owner (generalmente es quién ejecuta la sentencia de creación), por ejemplo CREATE DATABASE db_name. A este owner, Postgres le asigna por defecto todos los permisos sobre ese objeto. Public - Existe el pseudo-rol o palabra clave Public , que se puede entender como un grupo que contiene a todos los usuarios de la instancia. Por defecto, este grupo tiene ciertos privilegios sobre los objetos de la base de datos, como ser: CONNECT y TEMPORARY (crear tablas temporales) para las bases de datos, EXCECUTE para las funciones y USAGE para los lenguajes y tipos de datos. Nota : no se asignan privilegios por defecto a Public para tablas, columnas, esquemas, secuencias, foreign data wra...

Cómo obtener las queries bloqueadas y liberarlas en PostgreSQL

Se debe ejecutar la siguiente consulta sobre la base de datos bloqueada: SELECT blocked_locks.pid     AS blocked_pid,          blocked_activity.usename  AS blocked_user,          blocking_locks.pid     AS blocking_pid,          blocking_activity.usename AS blocking_user,          blocked_activity.query    AS blocked_statement,          blocking_activity.query   AS current_statement_in_blocking_process FROM  pg_catalog.pg_locks         blocked_locks JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid JOIN pg_catalog.pg_locks         blocking_locks      ...

Cómo obtener el tamaño de las bases de datos en PostgreSQL

Para obtener el tamaño de todas las bases de datos en nuestra instancia de PostgreSQL, podemos utilizar la siguiente sentencia: SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS SIZE  FROM pg_database; Explicación: pg_database  almacena la información de todas las bases de datos de la instancia, aquí seleccionamos particularmente el campo datname que es el nombre de la base de datos. A su vez, utilizamos dos funciones disponibles en el motor de Postgres, una de ellas es pg_database_size(data_base_name) que recibe como parámetro el nombre de la base de datos y devuelve su tamaño en bytes; para convertirlo a una forma "más legible", utilizamos la función pg_size_pretty(number) , la cual recibe como parámetro una cifra en bytes y la transforma según su tamaño a Kb, Gb, etc. La salida sería de la forma: Nombre de la base de datos | Tamaño Opcionalmente, para obtener el tamaño de una base de datos en específico, podemos agregar el filtro...