Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2945098
  • 博文数量: 199
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 4126
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 19:06
个人简介

半个PostgreSQL DBA,热衷于数据库相关的技术。我的ppt分享https://pan.baidu.com/s/1eRQsdAa https://github.com/chenhuajun https://chenhuajun.github.io

文章分类

全部博文(199)

文章存档

2020年(5)

2019年(1)

2018年(12)

2017年(23)

2016年(43)

2015年(51)

2014年(27)

2013年(21)

2011年(1)

2010年(4)

2009年(5)

2008年(6)

分类: Mysql/postgreSQL

2014-06-26 11:35:28

最近同事在测试PostgreSQL C库libpq的IPV6时,使用了fe80的本地链接地址fe80::250:56ff:fe8d:6927(本机地址),结果报下面的错误:
Invalid argument

后来知道link-local地址需要指定网卡设备,于是在IPV6地址后面加上"%eth0"就可以了。

  1. conn = PQconnectdb("host=fe80::250:56ff:fe8d:6927%eth0 port=5432 dbname=postgres");

上面是Key Value形式连接字符串,使用下面的URL形式的连字符串时,仍然失败。

  1. conn = PQconnectdb("postgresql://postgres@[fe80::250:56ff:fe8d:6927%eth0]:5432/postgres");
报错:
invalid percent-encoded token: "fe80::250:56ff:fe8d:6927%eth0"

查了下libpq源码,原来"%"是URL的中的转义字符,libpq遇到"%"时按照URL的编码规则进行解码,发现"%"后面的格式不对于是报错。
于是按照URL的编码规则改成下面的样子,就可以了。

  1. conn = PQconnectdb("postgresql://postgres@[fe80::250:56ff:fe8d:6927%25eth0]:5432/postgres");

阅读(3625) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~