martes, 28 de octubre de 2008
BLOQUEOS DE SEQUENCIA
DECLARE
id INTEGER ;
oidseq integer;
BEGIN
select c.oid::integer
into oidseq
from pg_class c
where relname = secuencia;
perform pg_advisory_lock(oidseq);
select into id nextval(secuencia);
execute 'ALTER SEQUENCE ' || secuencia || ' RESTART ' || (id + cantidad)::text;
perform pg_advisory_unlock(oidseq);
return id;
end;
Nota:
* Tiene que estar creado el lenguage plpgsql: create language plpgsql
* Tener en cuenta que el usuario que largue la funcion almacenada tiene que ser ownere de la sequencia
* Probar procedimiento: select get_rango_id_tabla('"boleta_id_seq"',1);
------------------------------------------------------------------
referencia:
http://www.depesz.com/index.php/2008/03/20/getting-multiple-values-from-sequences/
------------------------------------------------------------------
martes, 21 de octubre de 2008
Activar Log
Errores / Seguimiento
Para activar el log os dos parámetros que hay que setear son
redirect_stderr = on
log_min_error_statement = error
se tiene que hacer en el archivo postgresql.conf y reiniciar el servidor
Consultar parámetros relacionados
select name, setting from pg_catalog.pg_settings s
where s.name in (
'log_destination',
'redirect_stderr',
'log_directory',
'log_filename',
'log_truncate_on_rotation',
'log_rotation_age',
'log_rotation_size',
'syslog_facility',
'syslog_ident',
'client_min_messages',
'log_min_messages',
'log_error_verbosity',
'log_min_error_statement',
'log_min_duration_statement',
'silent_mode'
)
Lugar de seguimiento
log_destination = 'stderr' existen varios métodos para emitir los mensajes del servidor (stderr, syslog y eventlog)
fichero de configuración
redirect_stderr = on permite enviar los errores enviados a stderr a los ficheros de seguimiento
puesta en marcha del servidor
log_directory = 'pg_log' si el parámetro anterior está habilitado determina el directorio donde se crean los ficheros de seguimiento
puesta en marcha del servidor
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' si redirect_stderr = on, nombre de los ficheros de seguimiento
log_truncate_on_rotation = off establece la rotación de ficheros, aunque se pueden usar alternativas
log_rotation_age = 1440 si redirect_stderr = on establece la duración máxima de cada fichero de seguimiento, con 0 deshabilita esta opción
log_rotation_size = 10240 tamaño de los ficheros rotados
syslog_facility = 'LOCAL0' si el seguimiento lo hace syslog, aquí se determina qué utilidad se usa
syslog_ident = 'postgres' si se usa syslog este es el nombre del programa utilizado para identificar los
mensajes de PostgreSQL.
Cuándo efectuar el seguimiento
en algunas opciones, se establecen níveles de mensaje, que en el propio fichero de configuración están los posibles valores,
elegir un determinado nivel incluye todos los niveles que se encuentran por debajo. Los niveles que existen son:
DEBUG[1-5]: información para desarrolladores.
INFO: información implícita sobre operaciones del usuario, por ej. durante VACUUM VERBOSE.
NOTICE: información que puede ayudar a los usuarios, por ej., en la creación de índices como parte de la clave
primaria.
WARNING: avisos al usuario, caso de un commit fuera de un bloque de
transacción.
ERROR: informa de un error que ha causado que aborte un comando.
LOG: información interesante para los administradores, por ej, la actividad de los puntos de verificación
(checkpoints).
FATAL: errores que han producido que aborte la sesión.
PANIC: errores que han producido que aborten todas las sesiones.
client_min_messages = notice establece el nivel de los mensajes que serán enviados a los clientes puesta en marcha del servidor
log_min_messages = notice controla el nivel de los mensajes que son escritos en el fichero de seguimiento puesta en marcha del servidor
log_error_verbosity = default controla el detalle de la información que se escribe en el fichero de seguimiento (terse, default, verbose), cada nivel añade más campos
log_min_error_statement = panic controla si la instrucción SQL que ha provocado el error debe ser recordada o no el el fichero de seguimiento. En caso de querer hacer un seguimiento, conviene cambiarla a ERROR. puesta en marcha del servidor
log_min_duration_statement = -1 registra las instrucciones y su duración si su ejecución tarda más que el indicado aquí.
Con 0 registra todas y con -1 ninguna
puesta en marcha del servidor
silent_mode = off la salida estándar y los errores se envían a /dev/null
6 | 81 |
name setting client_min_messages notice log_destination stderr log_directory pg_log log_error_verbosity default log_filename postgresql-%a.log log_min_duration_statement -1 log_min_error_statement panic log_min_messages debug log_rotation_age 1440 log_rotation_size 0 log_truncate_on_rotation on redirect_stderr off silent_mode off syslog_facility LOCAL0 syslog_ident postgres | name setting client_min_messages notice log_destination stderr log_directory pg_log log_error_verbosity default log_filename postgresql-%a.log log_min_duration_statement -1 log_min_error_statement error log_min_messages notice log_rotation_age 1440 log_rotation_size 0 log_truncate_on_rotation on redirect_stderr on silent_mode off syslog_facility LOCAL0 syslog_ident postgres |