log_fdw--1.4.sql (75 lines of code) (raw):
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "ALTER EXTENSION log_fdw UPDATE TO '1.4'" to load this file. \quit
CREATE FUNCTION log_fdw_handler()
RETURNS fdw_handler
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
CREATE FUNCTION log_fdw_validator(text[], oid)
RETURNS void
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
CREATE FOREIGN DATA WRAPPER log_fdw
HANDLER log_fdw_handler
VALIDATOR log_fdw_validator;
/*
* Although pg_ls_logdir() can be used instead of this function, we maintain
* list_postgres_log_files() as a wrapper around that to not to break
* applications built around log_fdw extension.
*/
CREATE OR REPLACE FUNCTION list_postgres_log_files(
OUT file_name TEXT,
OUT file_size_bytes BIGINT)
RETURNS SETOF record
LANGUAGE sql
VOLATILE PARALLEL SAFE STRICT
BEGIN ATOMIC
SELECT name AS file_name, size AS file_size_bytes FROM pg_ls_logdir();
END;
/*
* Creates foreign table for a given server log file.
*/
CREATE OR REPLACE FUNCTION create_foreign_table_for_log_file(
table_name TEXT,
server_name TEXT,
log_file_name TEXT)
RETURNS void AS
$BODY$
BEGIN
IF $3 LIKE '%.csv' or $3 LIKE '%.csv.gz'
THEN
EXECUTE format('CREATE FOREIGN TABLE %I (
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
backend_type text,
leader_pid integer,
query_id bigint
) SERVER %I
OPTIONS (filename %L)',
$1, $2, $3);
ELSE
EXECUTE format('CREATE FOREIGN TABLE %I (
log_entry text
) SERVER %I
OPTIONS (filename %L)',
$1, $2, $3);
END IF;
END
$BODY$
LANGUAGE plpgsql;
REVOKE ALL ON FUNCTION log_fdw_handler() FROM PUBLIC;
REVOKE ALL ON FUNCTION log_fdw_validator(text[], oid) FROM PUBLIC;
REVOKE ALL ON FOREIGN DATA WRAPPER log_fdw FROM PUBLIC;
REVOKE ALL ON FUNCTION list_postgres_log_files() FROM PUBLIC;
REVOKE ALL ON FUNCTION create_foreign_table_for_log_file(text, text, text) FROM PUBLIC;