Professional Documents
Culture Documents
Capacitacin Nivel 1
Da 2
Agenda
Herramientas
PgAdmin, psql
Monitoreo
Administracin general
Jerarquia de objetos.
Respaldos
WAL.
Mantenimiento
SQL.
PgAdmin Vs psql
PgAdmin vs psql (2)
PgAdmin Query Builder
Monitoreo con PgAdmin
Es ms completo.
Rol = usuario
USER opcin LOGN por defecto.
ROLE opcin NO LOGN por defecto.
GROUP no tiene CONNECTON LMT
SE-Postgresql
Propone un ambiente ms seguro entre usuarios del SO
y la base.
Ejemplos
CREATE GROUP los_resagados
WTH NOSUPERUSER NOLOGN;
SELECT (CURRENT_DATE+1)::timestamp;
CREATE USER resagado1
WTH PASSWORD '1234'
VALD UNTL '2009-08-06 00:00:00'
N GROUP los_resagados;
CREATE USER resagado2 WTH PASSWORD '1234' VALD UNTL '2009-08-
06 00:00:00' N GROUP los_resagados;
DROP USER resagado1;
ALTER USER resagado2 WTH PASSWORD '4321';
1
2
Bases de Datos
CREATE DATABASE name
[ [ WTH ] [ OWNER [=] dbowner ]
[ TEMPLATE [=] template ]
[ ENCODNG [=] encoding ]
[ TABLESPACE [=] tablespace ]
[ CONNECTON LMT [=] connlimit ] ]
TEMPLATE: utilizar esa base como plantilla de la nueva. ncluido los datos!
TABLESPACE: Podemos almacenar la base en una parte especial del disco.
CONNECTON LMT: Permite hasta un nmero determinado de conexiones.
OWNER: Dueo de la base.
HINT: La base que utilicemos como plantilla no debe estar siendo accedida
Por otros usuarios.
Tablespaces vs. Schemas
Esquemas
Organizacin lgica
de objetos y
relaciones de la base.
Tablespaces
Organizacin fsica
de objetos del cluster.
Ejemplo Tablespace
emanuel@pgsql:/var/lib/pgsql$ sudo mkdir data/test_ts
emanuel@pgsql:/var/lib/pgsql$ sudo chown postgres data/test_ts
CREATE TABLESPACE test_ts OWNER resagado2
LOCATON '/var/lib/pgsql/data/test_ts';
CREATE DATABASE test WTH OWNER resagado2
TEMPLATE template1 TABLESPACE test_Ts;
Createdb
createuser
Comandos desde shell
Ejemplo Schema + Tablespace
base1=# create database foo wit
owner = post!res
template=template1
encodin!="#T$%" tablespace=prueba&
'()*T) +*T*,*-)
base1=# create scema .&
'()*T) -'H)/*
base1=# create table .01&
'()*T) T*,L)
base1=# alter table . set scema .&
*LT)( T*,L)
root2bo.:3usr3local3p!sql# mkdir tablespace
root2bo.:3usr3local3p!sql# cown post!res tablespace3
base1=# create tablespace prueba owner post!res location
"3usr3local3p!sql3tablespace"&
'()*T) T*,L)-P*')
base1=# alter table ... set tablespace prueba&
*LT)( T*,L)
Una tabla puede estar
en un esquema
y en un tablespace al
mismo tiempo.
Jerarqua de Objetos
Servidores
Bases de datos
Cast
Lenguajes
Esquemas
...
Replicacion
Tablespaces.
Roles Group y
User.
Tablas
Vistas
Tipos
Funciones
Sequences
Funciones y Triggers
Dominios
Agregados y
conversiones
Respaldos y restauraciones
Herramientas estandar
pg_dump
pg_restore
gzip -d archivo.sql.gz
WTF?!
WTF?????!!!!!!
Ubicacin
en el
cluster:
pg_xlog
Contenido:
archivos de
bloque
Antiguos problemas de la WAL
LOG: next transaction D: 884736;
next OD: 306834> PANC: could not
access status of transaction 884736>
DETAL: could not read from file> "/usr
/local/pgsql8b-3/data/pg_clog/0000"- at
offset 221184: Success> LOG: startup
process (PD 17774) was terminated by
signal 6> LOG: aborting startup due to
startup process failure
LOG: next transaction D: 1048576;
next OD: 306834> PANC: could not
access status of transaction 1048576>
DETAL: could not open file "/usr/local/
pgsql8b-3/data/pg_clog/0001"-: No>
such file or directory
pg_resetxlog
NO FUNCONA!
dd bs=8k count=1 < /dev/zero > /usr/loc-al/pgsql8b3/data/pg_-clog/0001
Mantenimiento
Herramientas indispensables
VACUUM
ANALYZE
RENDEX
Clusterdb
Mantenimiento Logs
MARTLLO
+
=
Vacuum
Recobrar espacio de disco
ocupado por la actualizacin y
borrado de datos.
Actualizar las estadsticas
usadas por el planeador.
Proteger contra la posible
prdida de datos sobre
problemas con el transaction
D en datos viejos
Tipos:
- FREEZE
- ANALZE
- F!LL
- S"P
Vacuum Full vs. vacuum
VACUUM FULL puede liberar
mayor cantidad de disco pero
es ms lento.
VACUUM FULL requiere
bloqueo exclusivo en la tabla
que esta trabajando.
Desventaja es que no reduce
el tamao proporsional del
ndice. Puede hacer a los
ndices ms grandes.
Reindex database.
EL Vacuum estndar puede
correr de forma paralela con
otras operaciones exepto
modificaciones en los objetos
(ALTER)
Generalmente se recomienda
utilizar este tipo de vacuum.
Vacuum
Desde linea de
comandos:
Vacuumdb
-a, --all vacuum all
databases
-d, --dbname=DBNAME
database to vacuum
-t, --table='TABLE[(COLUMNS)]'
vacuum specific table only
-f, --full do full vacuuming
-z, --analyze update
optimizer hints
Desde un cliente:
VACUUM [ FULL ] [ FREEZE ]
[ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ]
[ VERBOSE ] ANALYZE [ table [ (column
[, ...] ) ] ]
Vacuum Freeze
Como saber
cuando los XD's
estn al borde?
SELECT relname,
age(relfrozenxid)
FROM pg_class
WHERE relkind = 'r';
SELECT datname,
age(datfrozenxid)
FROM pg_database;
El posible mensaje
que puede
aparecer es:
WARNNG:
database "ubuntu"
must be vacuumed
within 177008866
transactions
Configurar VACUUM
vacuum_cost_limit = 200
vacuum_cost_page_hit = 1
vacuum_cost_page_miss = 10
vacuum_cost_page_dirty = 20
vacuum_cost_delay = 0
Esto se va sumando
Hasta alcanzar el lmite
Es para disminuir el /O cuando
el clculo de costo toco lmite.
Dejarlo bajo es una buena prctica, ir
subiendo a medida que hagamos las
mediciones.
Autovacuum
Es un daemon que
constantemente
vigila las tablas
con muchas
inserciones y
actualizaciones.
Es altamente
recomendado.
Se configura
desde el
postgresql.conf
Se lo puede
desactivar.
Mejoras en 8.4
Vacuum en 8.4
utiliza VSM
(Visibility Space
Map)
Permite realizar la
operacin sobre
tuplas modificadas
unicamente.
Otros caminos
Reacomodar la
tabla con ALTER.
ANALYZE
Recolecta estadsticas
de acuerdo a la
configuracin de las
relaciones.
Se puede setear la
recoleccin por
columna.
Los ndices
clusterizados no
tienen efecto con este
comando.
RENDEX
{ NDEX |
TABLE |
DATABASE |
SYSTEM } name
[ FORCE ]
Desde linea de comando:
reindexdb
Clusterdb
Reclusteriza los
ndices que han
sido clusterizados.
La sentencia es
CLUSTER y la
linea de comandos
es clusterdb.
CLUSTER?
Obliga a la tabla a
guardarse en el mismo
orden que el ndice.
nversamente
proporsional, a menos
cambios, se
recomienda aumentar
el fillfactor.
Crear: CLUSTER employees
USNG employees_ind;
Actualizar: CLUSTER
employees;
Actualizar todo: CLUSTER;
CREATE NDEX nombreind
ON tabla
USNG btree
(columna)
WTH (FLLFACTOR=80);
ALTER TABLE tabla CLUSTER ON
nombreind;
Rotacin y
mantenimiento de logs
Evitar el crecimiento
exponencial de los logs.
Especificar rotacin.
Mostrar datos realmente
relevantes.
Borrar historicos seguido, a
menos que sean valuables.
Setear niveles de log de
acuerdo a la situacin, evitar
dejar uno esttico.
pg_ctl start | rotatelogs /var/log/pgsql_log
86400
Desde el postgresql.conf:
log_rotation_size = 10MB
Martillo
Suele usarse
cuando todo falla.
SQL
Lenguajes
DDL
DML
Control de transacciones
Control de permisos
Sentencias bsicas DML
SELECT
NSERT
UPDATE
TRUNCATE
SELECT
SELECT [ ALL | DSTNCT [ ON ( expression [, ...] ) ] ]
* | expression [ AS output_name ] [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVNG condition [, ...] ]
[ { UNON | NTERSECT | EXCEPT } [ ALL ] select ]
[ ORDER BY expression [ ASC | DESC | USNG operator ] [ NULLS { FRST | LAST } ] [, ...] ]
[ LMT { count | ALL } ]
[ OFFSET start ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAT ] [...] ]
where from_item can be one of:
[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
from_item [ NATURAL ] join_type from_item [ ON join_condition | USNG ( join_column [, ...] ) ]
Predicado
Fuentes
Agrupacin
Conjuncin
Ordenacin
Filtro
Bloqueos
Condicin
NSERT
NSERT NTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ...] |
query }
[ RETURNNG * | output_expression [ AS
output_name ] [, ...] ]
UPDATE
UPDATE [ ONLY ] table [ [ AS ] alias ]
SET { column = { expression | DEFAULT } |
( column [, ...] ) = ( { expression | DEFAULT }
[, ...] ) } [, ...]
[ FROM fromlist ]
[ WHERE condition | WHERE CURRENT OF
cursor_name ]
[ RETURNNG * | output_expression [ AS
output_name ] [, ...] ]
DELETE - TRUNCATE
DELETE FROM [ ONLY ] table [ [ AS ] alias ]
[ USNG usinglist ]
[ WHERE condition | WHERE CURRENT OF
cursor_name ]
[ RETURNNG * | output_expression [ AS
output_name ] [, ...] ]
TRUNCATE [ TABLE ] name [, ...] [ CASCADE |
RESTRCT ]
DELETE ejemplo
Condicionales de SQL
CASE
COALESCE
NULLF
GREATEST AND
LEAST
Subquerys - SemiJoins
CREATE
ALTER
DROP
DDL
create table varios(
state char(2),
name varchar(30),
children integer,
distance float,
budget numeric(19,2),
born date,
checkin time,
started timestamp default
CURRENT_TMESTAMP
);
comment on table varios S 'ejemplo de tabla con
varios datos y un default';
CREATE TABLE statename (
code CHAR(2) PRMARY KEY,
name CHAR(30)
);
COMMENT ON statename S 'tabla de paises';
create table customer (
customer_id integer,
name char(30),
telephone char(20),
state char(2) references statename
);
COMMENT ON customer S 'ingresar un state que
este en statename';
create table employee (
employee_id integer primary key,
name varchar(20),
weight float
);
create table llaves_compuestas(
col1 integer,
col2 integer,
primary key(col1,col2)
);
...DDL (cont)
create table llaves_foraneas_compuestas(
col3 integer,
col4 integer,
foreign key (col3, col4)
references
llaves_compuestas
);
create table t_con_check(
nombre varchar(20) CHECK
(length(trim(nombre)) > 1),
sexo char(1) CHECK(sexo N ('M','F')),
fecha_pasada date
CHECK(fecha_pasada
BETWEEN '1990-01-01' AND CURRENT_DATE),
CHECK (upper(trim(nombre)) != 'EMA')
--check de tabla
);
ALTER ejemplos
prueba=# alter table customer add primary key(customer_id);
NOTCE: ALTER TABLE / ADD PRMARY KEY crear el ndice implcito
customer_pkey para la tabla customer
ALTER TABLE
prueba=# create table coches(
customer integer references customer,
modelo varchar(4)
);
CREATE TABLE
prueba=# create index ix_btree_customer on customer USNG btree(customer_id)
TABLESPACE prueba;
Prueba=# create index ix_h_cutomer on customer USNG hash(customer_id)
TABLESPACE prueba;
Vistas simples
Con la vista se puede hacer una simulacion del sinonym de Oracle
(Permite dar un alias a una tabla). De esta forma:
CREATE VEW tablaAlias AS 'Select * from tabla';
-- No confundir con las vistas materializadas!!!
De la misma forma podemos crear una funcion para que retorne un record set...
CREATE OR REPLACE FUNCTON simula(integer)
MMUTABLE LANGUAGE SQL AS 'Select * from tabla where columna = $1';
Control transaccional
BEGN
END
SAVEPONT
COMMT
ROLLBACK
PREPARE TRANSACTON
ROLLBACK PREPARED
Ejemplo bsico
Control permisos
GRANT
REVOKE
</Da 2>
Gracias!