Uso de la extensión log_fdw para acceder al registro de base de datos mediante SQL - Amazon Relational Database Service

Uso de la extensión log_fdw para acceder al registro de base de datos mediante SQL

La instancia de base de datos de RDS para PostgreSQL admite la extensión log_fdw, que se puede utilizar para el acceso al registro del motor de base de datos a través de una interfaz SQL. La extensión log_fdw proporciona dos funciones que facilitan la creación de tablas externas para los registros de la base de datos:

  • list_postgres_log_files: muestra los archivos del directorio de registro de la base de datos y el tamaño del archivo en bytes.

  • create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text): crea una tabla externa para el archivo especificado en la base de datos actual.

Todas las funciones creadas por log_fdw pertenecen a rds_superuser. Los miembros del rol rds_superuser pueden conceder acceso a estas funciones a otros usuarios de la base de datos.

De forma predeterminada, Amazon RDS genera los archivos de registro en formato stderr (error estándar), como se especifica en el parámetro log_destination. Solo hay dos opciones para este parámetro: stderr y csvlog (valores separados por comas, CSV). Si se añade la opción csvlog al parámetro, Amazon RDS generará tanto el registro stderr como el registro csvlog. Esto puede afectar a la capacidad de almacenamiento del clúster de base de datos, por lo que debe tener en cuenta los demás parámetros que afectan a la gestión de jlos registros. Para obtener más información, consulte Configuración del destino del registro (stderr, csvlog).

Uno de los beneficios de generar registros csvlog es que la extensión log_fdw permite crear tablas externas con los datos perfectamente divididos en varias columnas. Para ello, la instancia debe asociarse a un grupo de parámetros de base de datos personalizado para que usted pueda cambiar la configuración de log_destination. Para obtener información acerca de cómo hacerlo, consulte Uso de parámetros en su instancia de base de datos de RDS for PostgreSQL.

En el ejemplo siguiente se presupone que el parámetro log_destination incluye cvslog.

Para utilizar la extensión log_fdw
  1. Instale la extensión de log_fdw.

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. Cree el servidor de registros como contenedor de datos externo.

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. Seleccione todos los elementos de una lista de archivos de registro.

    postgres=> SELECT * FROM list_postgres_log_files() ORDER BY 1;

    A continuación, se muestra una respuesta de ejemplo.

    file_name | file_size_bytes ------------------------------+----------------- postgresql.log.2023-08-09-22.csv | 1111 postgresql.log.2023-08-09-23.csv | 1172 postgresql.log.2023-08-10-00.csv | 1744 postgresql.log.2023-08-10-01.csv | 1102 (4 rows)
  4. Crear una tabla con una sola columna log_entry para el archivo seleccionado.

    postgres=> SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');

    La respuesta no proporciona más detalles que el hecho de que la tabla ya existe.

    ----------------------------------- (1 row)
  5. Seleccione una muestra del archivo de registro. El siguiente código recupera la hora del registro y la descripción del mensaje de error.

    postgres=> SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;

    A continuación, se muestra una respuesta de ejemplo.

    log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2023 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2023 PDT | database system was interrupted; last known up at 2023-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2023 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2023 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2023 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2023 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2023 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)