J'importe des données d'un fichier vers la table de base de données PostgreSQL en utilisant COPY FROM
. Certaines des chaînes de mon fichier contiennent des caractères hexadécimaux (principalement \ x0d et \ x0a) et je voudrais qu'ils soient convertis en texte normal en utilisant COPY
.
Mon problème est qu'ils sont traités comme texte normal et restent dans la chaîne inchangée.
Comment puis-je convertir les valeurs hexadécimales?Comment convertir des caractères hexadécimaux avec Postgres COPY FROM?
Voici un exemple simplifié de ma situation:
-- The table I am importing to
CREATE TABLE my_pg_table (
id serial NOT NULL,
value text
);
COPY my_pg_table(id, data)
FROM 'location/data.file'
WITH CSV
DELIMITER ' ' -- this is actually a tab
QUOTE ''''
ENCODING 'UTF-8'
fichier Exemple:
1 'some data'
2 'some more data \x0d'
3 'even more data \x0d\x0a'
Remarque: le fichier est délimité par des tabulations.
Maintenant, faire:
SELECT * FROM my_pg_table
me obtiendrait des résultats contenant hex.
Informations complémentaires pour le contexte:
Ma tâche consiste à exporter les données des tables sybase (plusieurs centaines) et l'importation à Postgres. J'utilise UNLOAD
pour exporter des données vers des fichiers comme ceci:
UNLOAD
TABLE my_sybase_table
TO 'location/data.file'
DELIMITED BY ' ' -- this is actually a tab
BYTE ORDER MARK OFF
ENCODING 'UTF-8'
La réponse à la question dans votre dernier paragraphe: https://www.postgresql.org/docs/current/static/sql-copy.html section Formats de fichiers: "backslash n'est pas un caractère spécial dans le format CSV" – azalea