PostgreSql - 在数据库迁移期间转换为 cidr
PostgreSql - Cast to cidr during database migration
我是法国人。所以,为我的错误道歉!
我正在通过 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: invalid cidr value : « 10.26.3.0/23 »
DETAIL: The value has bits positioned to the right of the mask.
********** Error **********
ERREUR: invalid cidr value : « 10.26.3.0/23 »
SQL state: 22P02
Detail: The value has bits positioned to the right of the mask.
错误是法语。我自己翻译的
我尝试将 varchar 转换为 cidr,但它不起作用!同样的错误!
我到处搜索以了解如何将这个 f*****g CHARACTER VARYING 转换为 CIDR 类型,但没有结果!请 !!!帮我 ! :(
这是因为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'
我是法国人。所以,为我的错误道歉!
我正在通过 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: invalid cidr value : « 10.26.3.0/23 » DETAIL: The value has bits positioned to the right of the mask. ********** Error ********** ERREUR: invalid cidr value : « 10.26.3.0/23 » SQL state: 22P02 Detail: The value has bits positioned to the right of the mask.
错误是法语。我自己翻译的
我尝试将 varchar 转换为 cidr,但它不起作用!同样的错误! 我到处搜索以了解如何将这个 f*****g CHARACTER VARYING 转换为 CIDR 类型,但没有结果!请 !!!帮我 ! :(
这是因为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'