2011-11-14 6 views
1

Dans ma base de données Postgresql J'ai créé une table appelée NAV_DATA avec cinq colonnes:problèmes de commande PostgreSQL COPIE

id (PKEY) 
,name (VARCHAR) 
,call_type (VARCHAR) 
,date_created (date) 

Pour ces colonnes, j'ai le fichier csv que le delimiter TAB \t et quotechar ".
Il a également des champs vides dans la colonne du milieu. Comment autoriser l'acceptation de valeurs nulles dans la commande de copie?

Je veux insérer les colonnes (name, call_type, date_created). Je n'ai pas le champ id dans mon csv.

Comment copier des colonnes spécifiques dans le DB?

Le problème est également lié au délimiteur TAB \t?

+1

Veuillez jeter un coup d'œil à la [page appropriée] (http://www.postgresql.org/docs/current/static/sql-copy.html) du manuel et modifier votre question si vous voyez quelque chose de flou. –

+0

Vous mentionnez "5 colonnes", mais montrez seulement 4? –

Répondre

2
copy "NAV_DATA" (name,call_type,date_created) from 'c:/test.txt' with delimiter '\t' csv 
+0

Je pense que le nom de la table ne doit pas être entre guillemets. Le doute est que l'ID de clé primaire sera incrémenté automatiquement pour chaque enregistrement? – Nava

+0

Postgres est sensible à la casse pour les noms de table et de colonne et à moins d'être entouré par qoutes, il sera converti en minuscules. cela signifiera que NAV_DATA ne correspondra pas à une table appelée NAV_DATA. Vous devrez écrire "NAV_DATA" dans votre requête. – Tailor

+0

Vous pouvez utiliser une séquence comme cela a été suggéré par Erwin. Personnellement, lorsque j'importe des CSV, j'importe dans une table qui correspond à la structure CSV, puis j'utilise les requêtes SQL pour copier depuis la table sale importée vers mes tables propres. De cette façon, vous pouvez TRIM espaces, définir NULL, créer des séquences et exécuter la requête DISTINCT pour éliminer les doublons. – Tailor

1

Si vous vous demandez comment NULL valeurs sont représentées dans le fichier CSV ont un oeil à la page de manuel @Milen est un lien dans son commentaire. Ou écrivez des données de test (y compris les valeurs NULL) dans votre table et exportez-les avec COPY TO. Vous obtenez exactement le format attendu pour COPY FROM.

Dans le format standard NULL est représenté par \N, au format standard CSV par rien entre les délimiteurs. Et les colonnes non mentionnées dans la commande COPY seront remplies avec leurs valeurs par défaut respectives.

Une colonne en série par exemple (comme id probablement) obtiendra nextval() de la séquence associée pour chaque ligne. Si id n'a pas encore de valeur par défaut, create a sequence et nextval('my_sequence_name') la valeur par défaut de la colonne.

Questions connexes