如何在DoCmd.TransferDatabase命令中指定PostgreSQL的目标Schema?
如何在DoCmd.TransferDatabase命令中指定PostgreSQL的目标Schema?
我之前也碰到过类似的问题,Access的DoCmd.TransferDatabase对PostgreSQL Schema的支持确实有点棘手,以下几个实用方法你可以尝试:
方法一:直接在目标表名中指定完整的Schema+表名
你之前试过把目标表名写成Commercial.{table.lower()},但可能遗漏了几个关键细节:
- 首先要确保PostgreSQL中已经存在
Commercial这个Schema,如果还没创建,先在PGAdmin或psql中执行这条SQL:CREATE SCHEMA IF NOT EXISTS Commercial; - 其次要确认你的PostgreSQL用户拥有在
CommercialSchema中创建表的权限,执行这条语句赋予权限:GRANT CREATE ON SCHEMA Commercial TO {pg_user}; - 最后修改
TransferDatabase的参数,把目标表名明确写成Schema.表名格式,同时可以去掉连接字符串里的Schema=Commercial(Access的这个方法大概率不识别这个参数)。修改后的代码片段如下:a.DoCmd.TransferDatabase( acExport, "ODBC Database", f"ODBC;DSN=PostgreSQL30;DATABASE={db_name};UID={pg_user};PWD={pg_pwd};", acTable, f"{table}", f"Commercial.{table.lower()}" )
我当初就是用这个方法解决的,调整后表就成功导入到指定的Schema里了。
方法二:修改PostgreSQL用户的默认Schema
如果希望这个用户的所有数据库操作默认都指向CommercialSchema,可以修改用户的全局配置:
在PostgreSQL中执行:
ALTER USER {pg_user} SET search_path = Commercial, public;
这样即使不指定Schema,表也会默认创建在Commercial中。不过这个方法是全局生效的,如果你只是部分表需要导入到该Schema,可能不太适合。
方法三:检查ODBC驱动配置
确保你使用的PostgreSQL ODBC驱动是最新版本,旧版本对Schema的支持可能不完善。另外,在ODBC数据源的配置界面里,看看有没有「默认Schema」的选项,如果有的话直接设置为Commercial,这样建立连接后就默认使用这个Schema了。
备注:内容来源于stack exchange,提问作者arcee123
相关产品推荐
相关产品推荐

