2017-10-20 14 views
0

私はフランス語です。だから、私の間違いで申し訳ありません!PostgreSQL - データベース移行中にcidrにキャスト

私はPostgreSQL 9.6でpgAdmin4経由でデータベースの移行を行っています。最初のバージョンではCHARACTER VARYING型フィールドがあり、もう1つではCIDR型フィールドです。 私はこのコマンドを使用します:

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) 

しかし、それは動作しません! これはエラーです:

ERREUR:無効なCIDR値:«10.26.3.0/23» 詳細:値はマスクの右側に配置されたビットを持っています。 **********エラー********** ERREUR:無効なcidr値:«10.26.3.0/23» SQLの状態:22P02 詳細:値のビットはマスクの権利。

エラーはフランス語です。私はそれを自分で翻訳しました

私はvarcharをcidrにキャストしようとしましたが、動作しません!同じエロル! 私はこのf ***** gキャラクターのバリエーションをCIDRタイプにキャストする方法を知りましたが、結果はありませんでした!お願いします !!!助けて ! 。。:(

+0

Postgresの "g"は大文字ではありません。 –

+0

ありがとう!それは本当に私の問題ではありません:D –

+0

私は知っているが、読んで開始する前にそれを解決する必要があります:P –

答えて

1

10.26.3.0/23は、ネットワークのアドレスではないので、これがある10.26.2.0/23がされ

ですから、2つのオプションがあり、それはあなたが残しておきたいん何に関する情報に依存します:

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) 

この。あなたはあなたのアドレスを維持したい場合は、

INET、その後、INETのネットワークアドレスを見つけるために、ネットワークアドレスをキャストまたは:

EDIT:

は、あなたがより多くに関する情報たい場合は、平易な英語で自分のエラーをしたいとフランス語で(私はフランス人と同じ問題を経験していない場合は、方法によっては;-)あなたはコメントアウトすることができますpostgresql.conf

+0

興味深い。私は問題を厳しく苦労したのは、IPアドレスでしたが、テスト時には自動修正されていて、何のエラーもスローされませんでした。 http://rextester.com/QXFG14627 –

関連する問題