2017-10-20 108 views
0

我是法國人。所以,對我的錯誤感到抱歉!PostgreSql - 在數據庫遷移過程中投射到cidr

我正在通過pgAdmin4在PostgreSql 9.6上進行數據庫遷移,第一個是CHARACTER VARYING類型字段,另一個是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» DETAIL:該值具有定位於掩模的右側位。 **********錯誤********** ERREUR:無效的cidr值:«10.26.3.0/23» SQL狀態:22P02 細節:該值的位置於面具的權利。

錯誤是法文的。我自己翻譯它

我試圖將varchar轉換爲cidr,但它不起作用!同樣的錯誤! 我到處搜索,知道如何將這個字符變成CIDR類型,但沒有結果!請 !!!幫我 ! 。:(

+0

Postgres中的「g」不是大寫。 –

+0

哦,謝謝!但它不是真的我的問題:D –

+0

我知道,但必須解決之前開始閱讀:P –

回答

1

這是因爲10.26.3.0/23不是網絡的地址10.26.2.0/23

所以,你有兩個選擇,這取決於你要保留的相關信息:

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的網絡地址

或者,如果你想保持你的地址:

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) 

如果您想了解更多的相關信息:https://www.postgresql.org/docs/9.6/static/datatype-net-types.html

編輯:順便說一下,如果你希望你的錯誤用簡單的英語,而不是在法國(我是法國人,並遇到了同樣的問題;-)您可以註釋掉這行postgresql.conf

default_text_search_config = 'pg_catalog.french' 
+0

有趣。我強硬的問題是IP地址,但當測試它是自動更正,並沒有拋出任何錯誤。 http://rextester.com/QXFG14627 –