es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Registros de Expresiones de Tabla Comunes / CTE / Declaraciones WITH en Postgresql 13.

Estoy escribiendo algunas consultas utilizando la cláusula WITH (enfoque de expresión de tabla común) y me gustaría registrar el SQL en los archivos de registro del backend. Tengo la siguiente configuración de registro habilitada:

Versión de Postgresql 13

log_destination = 'csvlog'
logging_collector='on'
log_directory = 'log'
log_filename = 'postgresql-%a.log'
log_statement = 'all'

Pero cualquier SQL que comience con WITH no aparece en absoluto, aunque las declaraciones SELECT estándar se muestran correctamente.

Declaración de muestra que no se está registrando:

WITH 
table_a AS (SELECT 1+1 AS total),
table_b AS (SELECT 2+2 AS total),
table_c AS (SELECT 3+3 total)
SELECT a.total*b.total* c.total
FROM table_a AS a, table_b AS b, table_c AS c;

¿Hay alguna manera de registrar estas declaraciones de CTE también?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de registrar las declaraciones de expresiones de tabla comunes (CTE) en Postgresql. De forma predeterminada, el parámetro log_statement solo registra declaraciones SQL simples, y las declaraciones CTE se consideran consultas complejas, por lo que no se registran.

    Para habilitar el registro de las declaraciones CTE, es necesario modificar el parámetro log_min_duration_statement. Este parámetro controla qué declaraciones se deben registrar según su tiempo de ejecución. Al establecerlo en cero, se pueden registrar todas las declaraciones, incluyendo aquellas que utilizan CTEs.

    Para modificar el parámetro, puedes agregar la siguiente línea a tu archivo postgresql.conf y reiniciar el servidor:

    log_min_duration_statement = 0

    O puedes establecerlo para la sesión actual o la transacción mediante la ejecución de este comando antes de ejecutar tus consultas:

    SET log_min_duration_statement = 0;

    Una vez modificado, todas las declaraciones, incluyendo las declaraciones CTE, se registrarán en el archivo de registro especificado.

Comments are closed.