VB.NET使用Npgsql连接PostgreSQL失败,报错‘Couldn't set old guids’如何解决?
解决Npgsql连接PostgreSQL时"Couldn't set old guids"错误
问题重现
连接PostgreSQL时抛出异常:
InnerException = {"Couldn't set old guids (Parameter 'old guids')"}
使用的连接字符串:
"Server = 192.168.XX.XXX; Port = 5432; Database = XXXXX; User Id = postgres; Password = XXXXXX; Initial Schema = public; Pooling=true; Min Pool Size =0; Maximum Pool Size=1024; old guids=True"
VB连接代码:
Public ConexionPostSql2 As New NpgsqlConnection(cs2) Public Function ConectarPostgreSql2() As Boolean Try System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance) ConexionPostSql2.Open() ConectarPostSql2 = True Catch ex As Exception ConectarPostSql2 = False MsgBox(ex.Message, MsgBoxStyle.Critical, "Error PostgreSQL") End Try End Function
解决方法
1. 适配Npgsql版本调整参数
如果使用Npgsql 6.0及以上版本:
OldGuids参数已被废弃,改用GuidFormat参数控制Guid存储格式。- 若需要旧版Guid存储(bytea类型),将连接字符串中的
old guids=True替换为:GuidFormat=Legacy - 若使用默认的uuid类型存储,直接移除
old guids=True参数即可。
- 若需要旧版Guid存储(bytea类型),将连接字符串中的
如果使用Npgsql 5.x及更早版本:
- 确保参数名拼写为驼峰式写法(部分旧版本可能严格校验):
OldGuids=True - 若仍报错,尝试移除该参数,使用默认的Guid处理逻辑。
- 确保参数名拼写为驼峰式写法(部分旧版本可能严格校验):
2. 规范连接字符串格式
移除参数值前后的多余空格,确保格式合规,示例修正后的连接字符串(以Npgsql 6+为例):
"Server=192.168.XX.XXX;Port=5432;Database=XXXXX;User Id=postgres;Password=XXXXXX;Initial Schema=public;Pooling=true;Min Pool Size=0;Maximum Pool Size=1024;GuidFormat=Legacy"
3. 校验版本兼容性
确认Npgsql版本与PostgreSQL版本匹配:
- 新版本Npgsql(6+)建议搭配PostgreSQL 10及以上版本;
- 若使用较旧的PostgreSQL版本,可降级Npgsql至5.x版本,再使用
OldGuids=True参数。
内容的提问来源于stack exchange,提问作者armasgash
相关产品推荐
相关产品推荐

