首页 新闻 会员 周边

相同的sql语句,相同的用户,不同的工具,执行结果不一样,原因是什么?

0
悬赏园豆:30 [已解决问题] 解决于 2024-03-25 09:30

使用到了一个PG数据库,pg库版本号:PostgreSQL 12.8 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit。

一、insert 语句
通过 navicat Premium(版本号是16.0.13),执行 insert 语句。成功执行;

自己用代码写了一个程序,里面也执行相同的 insert 语句,报错:提示信息是 “关系‘XXX’ 不存在”。代码中使用的是 Npgsql 框架进行操作。

二、select 语句
将 insert 语句换成 select 语句进行测试(其他代码保持不变):

在 navicat Premium 中,成功查询。
在自己的代码中执行,虽然也能查询成功,但是查询结果记录数少于在navicat Premium 中的。

请问,是否因为权限设置,导致了这种差异?能根据工具的不同,判断是否有权限查询或插入?或者是自己代码的连接字符串出了问题,导致权限不足?

代码使用的连接字符串是:
Host=19.121.xxx.xxx;Port=5432;Database=xxx;Username=xxx;Password=xxx;SSL Mode=Prefer;

对于这种,工具不同结果不同,工具不同或不能执行,实在匪夷所思,希望有高手解答,或指明一个排查方向。谢谢。

误会馋的主页 误会馋 | 菜鸟二级 | 园豆:242
提问于:2024-03-13 16:12
< >
分享
最佳答案
0

Copilot是这么说的😁
这种情况可能是由于以下几个原因导致的:

  1. 数据库权限:确保你的数据库用户有足够的权限来执行插入和查询操作。你可以在 PostgreSQL 中使用 GRANT 语句来给用户赋予相应的权限。

  2. 表名大小写:PostgreSQL 是大小写敏感的,如果你在代码中使用的表名和数据库中的表名大小写不一致,可能会导致 "关系 'XXX' 不存在" 的错误。在 PostgreSQL 中,未加引号的标识符会被自动转换为小写,而加引号的标识符则会保持原样。因此,如果你的表名在数据库中是大写或混合大小写,你需要在代码中使用引号将其包围起来。

  3. 连接字符串:检查你的连接字符串是否正确,包括主机名、端口、数据库名、用户名和密码。如果有任何错误,都可能导致无法正确连接到数据库。

  4. Npgsql 版本:确保你使用的 Npgsql 版本与你的 PostgreSQL 版本兼容。

  5. 查询结果不同:这可能是由于你的查询语句或查询条件不同导致的。确保你在代码中和在 Navicat Premium 中使用的查询语句是完全相同的。

你可以按照以上的建议进行排查,希望能帮助你解决问题。

收获园豆:30
bigroc | 初学一级 |园豆:148 | 2024-03-13 17:40
其他回答(2)
0

“关系XXX不存在” 你insert的数据表是有关联其他数据表吗?

此木|西贝 | 园豆:218 (菜鸟二级) | 2024-03-13 16:54

谢谢你的回复。

没有关联其他数据表。

支持(0) 反对(0) 误会馋 | 园豆:242 (菜鸟二级) | 2024-03-13 16:58

@误会馋: “关系 xxx_id_seq 不存在 ” 是提示这个吗?
还是说 “关系 xxx” 这个xxx代表的是你要插入的数据表?
如果是数据表的话,可以看下这个是否能解决你的问题https://www.cnblogs.com/huangjinyong/p/9169104.html

支持(0) 反对(0) 此木|西贝 | 园豆:218 (菜鸟二级) | 2024-03-13 17:04

@此木|西贝: 谢谢。

支持(0) 反对(0) 误会馋 | 园豆:242 (菜鸟二级) | 2024-03-25 09:31
0

检查下工具自带的链接参数

_Y_h | 园豆:204 (菜鸟二级) | 2024-03-14 09:48

您好,有更详细的说明一下吗?

支持(0) 反对(0) 误会馋 | 园豆:242 (菜鸟二级) | 2024-03-19 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册