Excel 2019 VBS执行PostgreSQL INSERT报错:relation 'andmebaas'不存在及外键问题
我来帮你拆解并解决这两个问题,核心都是数据库schema的识别和上下文一致性的问题:
一、搞定“relation 'andmebaas'不存在”的错误
这个问题的关键是:PGAdmin里你可能已经切换到了目标schema或者隐式用了全限定表名,但VBS脚本的数据库连接没有明确指定表所在的schema——毕竟你的andmebaas表在3个不同schema里,数据库没法自动猜你要操作哪一个。
你有两个实用的解决方向:
1. 直接用全限定表名写INSERT语句
在表名前加上目标schema的名称,比如你要操作eesti schema下的andmebaas,语句就改成:
INSERT INTO eesti.andmebaas (字段1, 字段2, k_m_vaba) VALUES ('值1', '值2', 'kv值');
不管连接的默认schema是什么,数据库都能精准定位到目标表。
2. 在VBS连接字符串里设置默认schema
如果不想每次都写schema前缀,可以给PostgreSQL的ODBC连接加SearchPath参数,指定默认使用的schema。比如你的VBS连接代码可以改成这样:
Dim conn Set conn = CreateObject("ADODB.Connection") conn.ConnectionString = "DRIVER={PostgreSQL Unicode};SERVER=你的服务器地址;DATABASE=你的数据库名;UID=用户名;PWD=密码;SearchPath=eesti" conn.Open
SearchPath还可以指定多个schema,用逗号分隔(比如SearchPath=eesti,public,other_schema),数据库会按顺序查找表。
二、解决k_m_vaba字段的外键约束报错
添加这个字段时报错,大概率是以下两种情况之一:
1. 插入的值在关联表里不存在
先验证你要插入的k_m_vaba值,是不是真的存在于eesti.kaibemaks表的主键字段中。可以在PGAdmin里跑个查询确认:
SELECT * FROM eesti.kaibemaks WHERE 主键字段 = '你要插入的k_m_vaba值';
如果查不到结果,说明插入的值不符合外键约束,得改成关联表里已有的值。
2. 外键约束没指定全限定表名
如果你的andmebaas表的外键约束是引用kaibemaks(而不是eesti.kaibemaks),当VBS连接的默认schema不包含eesti时,数据库找不到关联的表,就会触发约束报错。
解决办法二选一:
- 修改外键约束,把引用改成全限定名
eesti.kaibemaks; - 按照前面的方法,在VBS连接字符串里把
eesti加入SearchPath,让数据库能找到kaibemaks表。
总结
先明确你要操作的andmebaas表所在的具体schema,通过全限定表名或者设置连接的SearchPath解决表不存在的问题;对于外键报错,先验证插入值的合法性,再确保关联表的schema能被数据库识别。
内容的提问来源于stack exchange,提问作者Tevo Saks

