2015-07-16 1 views
0

J'ai une table de transfert qui est faiblement typée (toutes les colonnes (sauf pk) de texte de type de données) et je veux déplacer ces données dans un tableau qui est correctement tapé pour les données par exemple les chiffres sont numériques, les dates sont des dates, etc.Postgresql - transfert de données d'une table de transfert mal typée vers une table finale fortement typée - et erreurs de saisie

Mon approche initiale est de créer un curseur dans pgsql et de faire défiler les données en les insérant dans la table finale avec les distributions appropriées.

Je vais intercepter les erreurs et les utiliser pour insérer des lignes qui échouent dans une table d'erreurs que je peux examiner et adresser plus tard.

Y a-t-il une façon plus intelligente de faire cela?

salutations Dave

Répondre

1

Utiliser une fonction PL/PgSQL avec un bloc d'emballage BEGIN ... EXCEPTION WHEN ... END l'opération (s) qui peut échouer.

Voir Postgres sql exception handling for batch insert pour un exemple, et mises en garde. Ce serait bien si les fonctions de distribution de PostgreSQL pouvaient être appelées en mode test, où elles renvoyaient un résultat booléen indiquant le succès et rejetaient le produit, ou encore mieux renvoyaient un tuple de (result, successflag). De cette façon, vous pouvez tout faire avec SQL simple. Malheureusement, ils ne le supportent pas, vous devez donc utiliser une boucle de gestion des exceptions et des sous-transactions.