Herramientas de usuario

Herramientas del sitio


db:postgresql

PostgreSQL

Cliente

CONEXION SSL

psql "sslmode=require host=pg4-test dbname=template1" --username=pgrigio0 -W

Debug

VER CONFIGURACION EN VIVO

$ psql gis -c "show shared_buffers;"

VER USUARIOS ACTIVOS

mydb=# SELECT usesysid, usename FROM pg_stat_activity;
$ ps -ef | grep "postgres: "

VER SERVIDOR AL QUE ESTOY CONECTADO

\conninfo
SELECT CURRENT_USER usr, :'HOST' host, inet_server_port() port;
SELECT inet_server_addr() ip, inet_server_port() port;

Bases

EJECUTAR SCRIPT EN UNA BASE

script “creabase.sql” en base “dbtest” sobre servidor “localhost”

$ psql -f createbase.sql dbtest
$ psql dbtest < createbase.sql
dbtest=# \i createbase.sql

CONECTARSE A BASE DE DATOS

usuario “prueba” en servidor “localhost” con clave “pepe” en base “dbprueba”

$ psql -U prueba -h localhost -W -d dbprueba
$ psql -U prueba -h localhost -W "dbname=dbprueba sslmode=require"

usuario “prueba” en servidor “localhost” con clave “pepe” en base “dbprueba” con esquema por defecto “pruebaschema”

$ psql -U prueba -h localhost -W "dbname=dbprueba sslmode=require options=--search_path=pruebaschema"

LISTAR ESQUEMAS DE UNA BASE

postgres=# \dp
postgres=# select schema_name from information_schema.schemata;

VER ESQUEMA ACTUAL

postgres=# SHOW search_path;

CONECTARSE A UN ESQUEMA

postgres=# SET search_path TO myschema,public;

AGREGAR BASE

“dbprueba”

$ createdb dbprueba

VER BASES

$ psql -l
postgres=# \l
postgres=# SELECT datname FROM pg_database;

USAR BASE “dbprueba”

postgres=# \c dbprueba

VER USUARIOS DE LA BASE

usuarios y atributos de la base actual

postgres=# \du
mydb=# SELECT * FROM "pg_user";

RENOMBRAR BASE

renombrar base “nombreviejo” a “nombrenuevo”

mydb=# ALTER DATABASE nombreviejo rename to nombrenuevo;

CAMBIAR DUEÑO DE BASE

cambiar nombre a “unuevo” a la base “test”

test=# ALTER DATABASE test OWNER TO unuevo;

VER TAMAÑO DE LAS BASES

mydb=# SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;

Tablas

VER TABLAS DE LA BASE

postgres=# \dt
mydb=# SELECT * FROM "pg_tables";

VER TABLAS LISTAS Y SECUENCIAS DE LA BASE

postgres=# \d

CAMBIAR DUEÑO DE UNA TABLA

tabla “tabla” al usuario “user”

mydb=#  ALTER TABLE tabla owner to user;

Usuarios

LISTAR USUARIOS

mydb=# SELECT * FROM "pg_user";
postgres=# \z

LISTAR PERMISOS

Permisos de todos los usuarios y bases

postgres=# select datname as "Relation", datacl as "Access permissions" from pg_database;

QUIEN TIENE PERMISOS EN TABLA

Quien tiene permisos en la tabla mitabla de la base dbprueba

dbprueba=# \z mitabla

Permisos de los usuarios en la base 'prueba'

postgres=# select datname as "Relation", datacl as "Access permissions" from pg_database where datname = 'prueba';
prueba=# \dp

CREAR USUARIO

usuario con permisos de superuser

$ createuser -drs usuario

BORRAR USUARIO

usuario “admin” desde el servidor “localhost”

$ dropuser admin

ASIGNAR ROL A USUARIO

asignar rol “lectura” a usuario “user”

mydb=# GRANT user to lectura;

LISTAR ROLES

listar roles y usuarios asignados a cada uno

prueba=# \du

QUITAR LOGIN

mydb=# ALTER ROLE ooliquidacion_w WITH NOLOGIN;

LIMITAR CANTIDAD DE CONEXIONES

mydb=# ALTER ROLE usuario WITH CONNECTION LIMIT 1;

ASIGNAR PERMISOS

todos los permisos a “user” en base “dbase”

dbase=# GRANT ALL ON DATABASE dbase TO user;

REVOCAR PERMISOS

todos los permisos a “user” en todas las tablas de “base”

dbase=# REVOKE ALL ON ALL TABLES IN SCHEMA public FROM user;

select a “user” en base “dbase”

dbase=# GRANT select ON ALL TABLES IN SCHEMA public to user;

TIEMPO MAXIMO DE QUERY POR USUARIO

no permite consultas mayores a 10 segundos para el usuario

mydb=# ALTER ROLE usuario SET statement_timeout=10000;

CAMBIAR CLAVE

mydb=# UPDATE pg_shadow SET passwd = 'new_password' where usename = 'username';

LISTADO DE PERMISOS

SELECT (read)           r
INSERT (append)         a
UPDATE, DELETE (write)  w
RULE                    R
CONNECT                 c
CREATE                  C
TEMPORARY (tables)      T

Procesos y consultas

VER PROCESOS CORRIENDO

mydb=# select * from pg_stat_activity;

MATAR PROCESO

matar una query que esta corriendo

mydb=# SELECT pg_cancel_backend(procpid);

en caso que no responda se puede matar desde el propio linux (sin usar -9)

$ kill procpid

VER USUARIOS CONECTADOS A UNA BASE labase

mydb=# SELECT usename,client_addr FROM pg_stat_activity WHERE datname = 'labase';

Importar y exportar

EXPORTAR TODAS LAS BASES

$ pg_dumpall >bases.sql

EXPORTAR BASE

base “temp”

$ pg_dump test >text.sql

dump de base “prueba” con formato custom para después importar

$ pg_dump -Fc prueba > prueba.dump

IMPORTAR BASE

importar a base “prueba” desde archivo dump “prueba.dump” con formato custom

$ pg_restore --clean --role=postgres --dbname=prueba --no-owner prueba.dump

Actualizar datos con unl desde pc sin acceso al filesystem

Procedimiento para actualizar datos tomándolos desde un archivo csv|unl ubicado en una pc cliente del servidor. La limitación es que el comando copy sólo levanta archivos del filesystem local del servidor.

cat  /home/cliente/actas_sin_objeto_para_actualizar.csv| psql "sslmode=require host=postgre.server.com dbname=labase" --username=cliente -W -c "create temp table tmp_datos_domicilio (
    objeto_id          bigint,
    tipo_objeto        character varying(20),
    objeto             character varying(500),
    acta_id            bigint,
    t_acta             integer,
    nro_acta           bigint,
    serie              character varying(2),
    fecha_acta         timestamp without time zone,
    lugar_acta_id      bigint,
    ref_geografica     character varying(255),
    cant_encontradas   integer,
    cod_calle          integer,
    nom_calle          character varying(50),
    cod_intersec       integer,
    nom_intersec       character varying(50),
    altura             integer,
    letra_a            character varying(5),
    bis_a              boolean,
    sec                integer,
    mnz                integer,
    gra                integer,
    div                integer,
    sdiv               integer,
    carpeta            integer,
    catastral          character varying(25));
copy from stdin;"

copy tmp_datos_domicilio from stdin delimiter ',';

Replicación

PROCESOS CORRIENDO

en el master

$ ps -ef | grep sender

en el esclavo

$ ps -ef | grep receiver

ESTADO DE LA REPLICA

$ pg_lsclusters

VER ESCLAVOS CONECTADOS AL MASTER

en el master

$ psql -c "select client_addr, state, sent_location, write_location, flush_location, replay_location from pg_stat_replication;"

VER RETRASO EN EL ESCLAVO

en el esclavo

postgres=# select now() - pg_last_xact_replay_timestamp() AS replication_delay;
db/postgresql.txt · Última modificación: 2020/12/09 16:06 por grillo