martes, 28 de octubre de 2008

BLOQUEOS DE SEQUENCIA

como bloquear sequencias

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