Le module file_fdw fournit le wrapper de données distantes file_fdw, qui peut être utilisé pour accéder à des fichiers de données situées sur le système de fichiers du serveur. Les fichiers de données doivent être dans un format qui puisse être lu par COPY FROM; voyez COPY(7) pour les détails.
Une table distante créée en utilisant ce wrapper peut avoir les options suivantes:
Spécifie le fichier devant être lu. Requis. Doit être un chemin absolu.
Spécifie le format du fichier, comme dans l'option FORMAT de la commande COPY.
Spécifie si le fichier a une ligne d'entête, comme l'option HEADER de la commande COPY.
Spécifie le caractère délimiteur du fichier, comme l'option DELIMITER de la commande COPY.
Spécifie le caractère guillemet, comme l'option QUOTE de la commande COPY.
Spécifie le caractère d'échappement du fichier, comme l'option ESCAPE de la commande COPY.
Spécifie la chaîne null du fichier, comme l'option NULL de la commande COPY.
Spécifie l'encodage du fichier, comme l'option ENCODING de la commande COPY.
Une colonne d'une table distante créé en utilisant ce wrapper peut avoir les options suivantes :
C'est une option booléenne. Si elle vaut true, cela signifie que les valeurs de la colonne ne doivent pas être comparées à celle de la chaîne NULL (autrement dit, l'option null au niveau de l'extension). Ceci a le même effet que de lister la colonne dans l'option FORCE_NOT_NULL de COPY.
Les options OIDS et FORCE_QUOTE, de COPY ne sont pas supportées par file_fdw pour le moment.
Ces options ne peuvent être spécifiées que pour une table distante ou ses colonnes, pas comme options du wrapper de données distantes file_fdw, pas plus cque comme des options d'un serveur ou d'un mapping d'utilisateur utilisant le wrapper.
Changer les options au niveau des tables nécessite des privilèges superutilisateur, pour des raisons de sécurité: seul un superutilisateur devrait pouvoir déterminer quel fichier est lu. En principe des non-superutilisateurs devraient avoir le droit de modifier ces options, mais ce n'est pas supporté pour le moment.
Pour une table utilisant file_fdw, EXPLAIN montre le nom du fichier devant être lu. À moins que COSTS OFF soit spécifié, la taille du fichier (en octets) est affichée aussi.
Exemple F.1. Créer une table distante pour les journaux applicatifs PostgreSQL au format CSV
Une des utilisations évidentes de file_fdw est de rendre les journaux applicatifs de PostgreSQL disponibles sous la forme d'une table. Pour faire cela, vous devez tout d'abord journaliser les traces au format CSV. Nous appelerons le fichier de traces pglog.csv. Tout d'abord, installez l'extension file_fdw :
CREATE EXTENSION file_fdw;
Ensuite créez un serveur de données distantes :
CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;
Maintenant, vous pouvez créer la table de données distantes. En utilisant la commande CREATE FOREIGN TABLE, vous devez définir les colonnes de la table, le nom du fichier CSV, et son format :
CREATE FOREIGN TABLE pglog ( 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 ) SERVER pglog OPTIONS ( filename '/home/josh/9.1/data/pg_log/pglog.csv', format 'csv' );
C'est tout -- maintenant, vous pouvez lire le fichier en exécutant une requête sur cette table. Bien sûr, en production, vous aurez besoin de définir un moyen pour tenir compte de la rotation du fichier de traces.