2017-10-20 52 views
0

Je suis français. Donc, désolé pour mes erreurs!PostgreSql - Diffusion vers cidr pendant la migration de la base de données

Je fais une migration de base de données sur PostgreSQL 9.6 via pgAdmin4 et dans le premier il y a un champ de type CHARACTER VARYING et dans l'autre c'est un champ de type CIDR. J'utilise cette commande:

INSERT INTO ip.cidr (cid_id, cid_res_id, cid_cidr) 
SELECT a, b, network(c) FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT ipp_id, res_id, ipp_ipcidr FROM public.ipplage') 
AS x(a integer, b integer, c cidr) 

mais il ne fonctionne pas! Ce est l'erreur:

ERREUR: Valeur cidr invalide: «10.26.3.0/23» DETAIL: La valeur a bits de position à droite du masque. ********** Erreur ********** ERREUR: valeur cidr non valide: «10.26.3.0/23» État SQL: 22P02 Détail: La valeur a des bits positionnés sur la droite du masque.

erreurs sont en français. Je l'ai traduit moi-même

J'ai essayé de lancer varchar à cidr mais ça ne marche pas! même eror! J'ai cherché partout pour savoir comment couler ce f ***** g CARACTERE VARIANT au type CIDR mais pas de résultat! S'il vous plaît !!! Aidez moi ! .. :(

+0

le «g» dans Postgres n'est pas en majuscule. –

+0

oh merci! Mais ce n'est pas vraiment mon problème: D –

+0

Je sais mais je dois résoudre cela avant de commencer à lire: P –

Répondre

1

C'est parce que 10.26.3.0/23 est pas l'adresse du réseau 10.26.2.0/23 est

Alors vous avez deux options, cela dépend de ce que vous voulez infos garder:

INSERT INTO ip.cidr (cid_id, cid_res_id, cid_cidr) 
SELECT a, b, network(c) FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT ipp_id, res_id, ipp_ipcidr::inet::cidr FROM public.ipplage') 
AS x(a integer, b integer, c cidr) 

Cette jeter l'adresse réseau iNET puis, trouver l'adresse réseau du iNet

Ou, si vous voulez garder votre adresse.

INSERT INTO ip.cidr (cid_id, cid_res_id, cid_cidr) 
SELECT a, b, network(c) FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT ipp_id, res_id, ipp_ipcidr FROM public.ipplage') 
AS x(a integer, b integer, c inet) 

Si vous voulez plus d'infos: https://www.postgresql.org/docs/9.6/static/datatype-net-types.html

EDIT: en passant, si vous voulez que votre erreur en langage clair et non en français (je suis français et l'expérience de la même question ;-) Vous pouvez commenter ces lignes dans le postgresql.conf:

default_text_search_config = 'pg_catalog.french' 
+0

Intéressant. J'ai dur le problème était l'adresse IP mais quand le test a été autocorrected et n'a jeté aucune erreur. http://rextester.com/QXFG14627 –