You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:08:06