Beruflich Dokumente
Kultur Dokumente
Capacitacin Nivel 1
Da 4
Agenda
Funciones de Date/time.
Recomendaciones para el manejo del servidor.
Configuracin
Parmetros avanzados
GEQO
Tipos de identificacin de objetos y columnas de sistema.
Tipos de datos propios.
Introduccin a los lenguajes procedurales.
Tipos.
Variedad.
Finalidad.
Expresiones regulares.
Fechas
Extraccin y Casteo
Ms sobre fechas
Ms sobre fechas
Configuracin
Configuracin
SHARED_BUFFERS
El que ms afecta el rendimiento.
Comenzar a partir del 10% de memoria.
Se peude setear en MB, KB (24MB, 24576KB).
Tener en cuenta el /proc/sys/kernel/shmax (Linux)
# sysctl -w kernel.shmmax=112009216 modificar a mano shmmax y
shmall
WORK_MEM
Memoria utilizada para trabajo del servidor.
Aumentar en caso de tener muchas consultas
complejas.
Para empezar el 4% de la memoria total.
Configuracin
MAX_CONNECTIONS
LOGGING (Varios parametros)
effective_cache_size (una de las ms
importantes debe tener un buen espacio en
memoria para serv. Dedicados)
wal_sync_method wal_buffers (cantidad, mtodo y
tamao de los buffers).
Autovacuum
Parmtetros avanzados
Opciones avanzadas
default_statistics_target (valores por defecto de la
recoleccin de estadsticas, con expecin de aquellas
establecidas con ALTER TABLE SET STATISTICS)
from_collapse_limit , join_collapse_limit (establece si el
optimizador debe fusionar subconsultas en las
consultas si los items del FROM o el JOIN -segn
corresponda- estn por debajo del valor dado)
constraint_exclusion (establece si el optimizador debe
utilizar las restricciones para la optimizacin.
effective_cache_size (tamao efectivo del cach de
disco disponible para rastreo de ndice. Aumentarlo,
aumenta la probabilidad de rastreo por ndice).
integer_datetime
Soporte o no de 64 bits.
lc_collate, lc_ctype
Forma de hacer la ordenacin y clasificaciones de texto.
server_encoding
Encoding del servidor
Parametros de almacenamiento
Fillfactor(integer)
Porcentaje entre 10 y 100 (empaquetamiento completo).
A menor valor, las operaciones de insercin empaquetarn la
tabla solo en el porcentaje especificado.
El espacio remanente ser reservado para los UPDATE de
las filas de esa pgina.
Esto le da la chance a los UPDATE de almacenar la copia de la fila en
el mismo espacio que el original, lo que es mejor que almacenarla en
otro lugar.
TOAST
Tipos
Variables:
Varchar
Text,
Bytea,
etc.
GEQO
max_connections
400 bytes ~c/u + 220*max_locks_per_transactions
max_prepared_transactions
600 bytes ~ c/u +220*max_locks_per_transactions
shared_buffers
Cada buffer es de 8kb (se recomiendan valores
superiores a 5000)
wal_buffers
8kb c/u (puede recomendarse un valor superior a los
5000)
max_fsm_pages
c/u 6 bytes (max_fsm_relations*16)
Descripcin
Valores Razonables
SHMMAX
SHMMIN
500 kb
SHMALL
Total compartida
~SHMMAX
SHMSEG
SHMNI
Mximo de segmentos
SEMMNI
Mx. De identificadores de
semforos
SEMMNS
(max_connection/16)*17+req.
Por las aplic.
SEMMSL
Min. 17
SEMMAP
Entradas en un mapa de
semforos
~SEMMNS
SEMVMX
Al menos 32767
Recomendaciones
Cambiando la configuracin
Como resetear recargar?
/etc/init.d/postgres reload
/etc/init.d/postgres restart
Service postgres reload | restart
Identificadores de objetos
Y columnas de sistema
OID
Tableoid
El OID de la tabla es el contenido de esta
fila. Es particularmente til para consultas
que selecccionan desde herencia,
permitiendo observar deque tabla
individualmente proviene un registro.
Puede ser 'unido' contra el OID de la
columna OID de pg_class, obteniendo el
nombre de la tabla.
Ejemplo Tableoid
xmin
Es la identidad de la transaccin de
insercin de la versin de la fila.
Una 'versin de una fila' es un estado
individual de una fila.
Cada actualizacin de una fila genera una
nueva versin de la misma para la misma fila
lgica.
Cmin -cmax
CMIN: El identificador de comando
(comenzando de 0) de la transaccin de
insercin.
CMAX:Idem de la transaccin de borrado
o en 0.
xmax
Es la identidad de la transaccin de
borrado o en 0 para una fila no borrada.
Es posible para esta columna ser distinto
de 0 en una versin de fila visible.
Usualmente indica que la transaccin de
borrado no ha sido comprometida an o
que fue abortada con 'rollback'.
ctid
Ubicacin fsica de una versin de una fila de
una tabla
El CTID puede variar, por lo que no se aconseja
para ser utilizada para buscar un determinado
campo. (Esto lo hace el VACUUM).
Es til para identificar campos en conjuntos
grandes. En el caso de buscar filas lgicas, se
recomienda OID.
Hackaton Ctid
Tipos propios
Ejemplo
create type groupOfNumber AS
(
first integer,
second float,
third numeric(10,2)
);
create table tabla1(
numeros groupOfNumber,
a serial not null,
dia date default CURRENT_DATE
);
Expresiones regulares
Operadores
http://developer.postgresql.org/pgdocs/postgres/functions-string.html
Ejemplos
'abc' ~ 'abc'
true
'abc' ~ '^a'
true
'abc' ~ '(b|d)'
true
false
Funciones
regexp_matches('foobarbequebaz', '(bar)
(beque)')
regexp_replace('Thomas', '.[mN]a.', 'M')
regexp_split_to_array('hello world', E'\\s+')
regexp_split_to_table('hello world', E'\\s+')
Ejemplos funciones
oob
fooXbaz
fooXX
fooXarYXazY
Ejemplos
Ejemplos
Lenguajes Procedurales
Finalidad
Extienden los limites de SQL para tareas
complejas.
Permiten el control de acceso a
determinados objetos.
Controlar la integridad de los datos.
Realizar operaciones suplementarias del
lado del servidor, aprovechando el poder de
procesamiento-
Caractersticas
Las funciones se ejecutan del lado servidor,
lo que puede ser utilizado para aprovechar
los beneficios que eso acarrea, en lugar de
ejecutarlos localmente.
Estn 'ms cerca de los datos'.
Lenguajes
Postgresql posee varios lenguajes
Procedurales (o extensiones).
Entre ellos se encuentran: SQL, PL/Pgsql,
C, PL/python, PL/perl, PL/tcl, PL/Proxy,
PL/Scheme, PL/R, PL/java, PL/php entre
varios ms...
Saber aprovechar las ventajas de cada uno
y conocer las debilidades.
Intro Pl/Pgsql
PL por excelencia
Procedural
Fcil de usar
Fcil de portar desde Oracle PL/SQL
Sintaxis simple y apropiada
No particularmente veloz
cache de planes de ejecucin
Requiere ser instalado, pero no necesita
modificaciones en la compilacin.
PL/pgsql
Plpgsql no esta instalado por defecto.
Se lo instala: CREATE LANGUAGE 'plpgsql';
Se puede crear a traves de un handler teniendo compilada la
shared library.
Plperl no viene por defecto, requiere librerias no incluidas.
Entre los mas conocidos PL/tcl, python, ruby,php, java... y
continua la lista...
Crear lenguaje
CREATE [ PROCEDURAL ] LANGUAGE name
CREATE [ TRUSTED ] [ PROCEDURAL ]
LANGUAGE name
Tipos de Funciones
Segn lo que retornan
Funciones normales
SRF (set-returning
function)
Agregacin
Especiales
trigger
language_handler
security dener
security invoke
Tradicionales
Retornan un solo resultado
(escalar o tupla)
Es posible retornar un
cursor abierto
Pueden tener efectos
secundarios( tabla
temporal)
Declaracin
postgres=# \h create function
...
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
[ RETURNS rettype ]
{ LANGUAGE langname
| IMMUTABLE | STABLE | VOLATILE
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]
Estructura
Cada bloque se define usando DECLARE, BEGIN, END; Estos bloques pueden estar
anidados.
Tras la cadena el lenguaje usado para crear la funcin se define usando la orden
"LANGUAGE" (otros lenguajes posibles son PL/PERL, PL/python, C, etc)
Calificadores
SECURITY DEFINER
STRICT
COST cost_metric
ROWS est_num_rows
Tipos de variables
Numero INTEGER;
otro
VARCHAR(20);
otroNumero NUMERIC(10,2);
-- RECOMENDADO, podemos utilizar nuestros datos predefinidos
soyDelTipoQueSeaUnCampo
mitabla.campo%TYPE;
soyDelTipoRegistroDeUnaTabla
mitable%ROWTYPE;
...
RETURN soyDelTipoRegistroDeUnaTabla.unCampoDeLaTabla;
-- utilizo un campo de la tupla en la variable
Bloques y declaracin
DECLARE
variable tipodedato:= dameUnValor;
variable2 algunTipo
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM tablita;
variable := valor;
SELECT field1, field2
INTO variable,variable2
FROM tablita WHERE .. LIMIT 1;
Ejemplo
CREATE FUNCTION suma (INT,INT,INT,INT)
RETURNS INT4 AS $BODY$
DECLARE
SUMA INT4;
soyElPrimerParametro ALIAS FOR $1;
BEGIN
SUMA:=soyElPrimerParametro+$2+$3;
SUMA:=SUMA-$4;
RETURN cast(SUMA as int4);
END;
$BODY$ LANGUAGE plpgsql;
postgres=> SELECT SUMA (1,2,3,4);
Suma
----2
FOR var_e IN
EXCUTE('someDynamicS
ql') LOOP
statements
RETURN NEXT
var_e;
statements
END LOOP
END LOOP;
Control condicional IF
IF condition THEN
:
END IF;
IF condition THEN
:
ELSE
:
END IF;
IF condition THEN
:
ELSEIF condition THEN
:
ELSE
:
END IF;
LOOP
-- codigo
EXIT WHEN count > 100;
CONTINUE WHEN count < 50;
-- cout IN [50 .. 100]
END LOOP;
Return
RETURN somevariable;
RETURN NEXT rowvariable;
RETURN QUERY; --nuevo!!
RETURN algundato
RETURN SETOF algunTipoDeDato (SRF)
RETURN void
RETURN refcursor
RETURN trigger
RAISE
RAISE DEBUG[1-5]
RAISE EXCEPTION
RAISE INFO
RAISE LOG
RAISE NOTICE
Exepciones
RAISE EXCEPTION 'Exception notice: %',
var
EXCEPTION
WHEN condition THEN
hacer o dejar
en blanco para ignorar
END;
Nombre
Tipo
NEW
%ROWTYPE
OLD
%ROWTYPE
TG_NAME NAME
TG_WHEN TEXT
TG_LEVEL TEXT
TG_OP
TEXT
TG_RELID OID
TG_RELNAMENAME
TG_NARGS INT
TG_VARGS TEXT[]
Descripcin
Nuevos Valores (INSERT | UPDATE)
Valores Antiguos ( UPDATE |DELETE )
Nombre del TRIGGER
BEFORE | AFTER
ROW | SENTENCIA (SQL)
INSERT, UPDATE | DELETE
Identificador de la tabla
Nombre de la tabla
Numero de argumentos
Argumentos
Ejemplo
CREATE OR REPLACE FUNCTION capitalize(_texto text) RETURNS text AS $BODY$
DECLARE
fin INTEGER;
temporal RECORD;
retval TEXT;
BEGIN
retval = ' ';
FOR temporal IN SELECT string_to_array (_texto,' ') AS arreglo LOOP
SELECT regexp_replace(
regexp_replace(
array_dims(temporal.arreglo),'[^1-9]','','g')
,'.','')::integer into fin;
FOR i IN 1..fin LOOP
retval = retval || upper(substring(temporal.arreglo[i],1,1)) || lower(regexp_replace(temporal.arreglo[i],'(.)(.*)','\\2')) ||' ';
END LOOP;
END LOOP;
RETURN trim(retval);
END;
$BODY$ LANGUAGE 'plpgsql' VOLATILE;
Ejemplo
Ejemplo Triggers
</Da 4>
</curso>
</Gracias!>