【问题标题】:Connect Excel to PostgreSQL via ODBC通过 ODBC 将 Excel 连接到 PostgreSQL
【发布时间】:2018-07-28 14:45:42
【问题描述】:

我正在尝试通过 PostgreSQL ODBC 32 位驱动程序从 Excel 连接到 PostgreSQL 数据库表。

在 Excel 中,我转到数据>从其他来源获取数据>从 ODBC。我导航到我设置的 ODBC 数据源,输入凭据,它在可用表出现时清楚地连接。当我点击“加载”并给出错误时,预览失败并且查询失败:

DataSource.Error: ODBC: ERROR [HY000] Error while executing the query
Details:
    DataSourceKind=Odbc
    DataSourcePath=dsn=PostgreSQL
    OdbcErrors=Table

当我在 ODBC 管理中测试连接时,它是成功的。我已经尝试过 ANSI 和 Unicode 驱动程序。 TIBCO Spotfire 连接到 ODBC 数据源并很好地提取数据。

您能提供的任何帮助将不胜感激。

【问题讨论】:

  • 您对从 DBA 的角度查看特定表有任何特殊权限/限制吗?您是否尝试过使用完整的管理员凭据?
  • 能否请您至少显示一下数据库的结构和表名?特别是如果其中有一个下划线_,比如the_name
  • @JosephSerido 我不知道。这是一个托管的 AWS RDS PostgreSQL 数据库。我正在使用我为实例设置的凭据。其他所有查看平台,如 Spotfire 或 PGadmin,都可以毫不费力地读取表格。
  • @AxelRichter 是的,对不起。它包含一个客户名称,所以我不想。数据库名和表名都不包含下划线。格式分别为“ABCquickbase”和“CompanyTracking”。 “CompanyTracking”的结构是 14 个字段的 131 条记录。需要注意的是,数据库中的两个表都会出现错误。谢谢。

标签: excel postgresql unicode odbc ansi


【解决方案1】:

这似乎是最新的 psqlODBC 驱动程序的一个错误,在我写这篇文章时,它是 psqlodbc_09_06_0500。我可以访问我的 PostgreSQL 服务器日志。这是错误消息和有问题的查询:

错误:字符 553 处的“ta”处或附近的语法错误 声明:select ta.attname, ia.attnum, ic.relname, n.nspname, tc.relname from pg_catalog.pg_attribute ta, pg_catalog.pg_attribute ia, pg_catalog.pg_class tc, pg_catalog.pg_index i, pg_catalog.pg_namespace n, pg_catalog。 pg_class ic 其中 tc.relname = 'rates' AND n.nspname = 'public' AND tc.oid = i.indrelid AND n.oid = tc.relnamespace AND i.indisprimary = 't' AND ia.attrelid = i.indexrelid AND ta.attrelid = i.indrelid AND ta.attnum = i.indkey[ia.attnum-1] AND (NOT ta.attisdropped) AND (NOT ia.attisdropped) AND ic.oid = i.indexrelid order by ia.attnumselect ta.attname,ia.attnum,ic.relname,n.nspname,来自 pg_catalog.pg_attribute ta 的 NULL,pg_catalog.pg_attribute ia,pg_catalog.pg_class ic,pg_catalog.pg_index i,pg_catalog.pg_namespace n 其中 ic.relname = 'rates_pkey' AND n.nspname = 'public' ANDic.oid = i.indexrelid AND n.oid = ic.relnamespace AND ia.attrelid = i.indexrelid AND ta.attrelid = i.indrelid AND ta.attnum = i.indkey[ia. attnum-1] AND(不是 ta.attisdropped)和(不是 ia.attis已删除)按 ia.attnum 排序

这是字符 553 周围的上下文:order by ia.attnumselect ta.attname, ia.attnum。请注意,两个字段名称之间缺少逗号。

我能够使用大约一岁的 psqlodbc_09_06_0200 让它工作。由于听起来您使用的是 32 位 Office,您可以从 https://www.postgresql.org/ftp/odbc/versions/msi/ 下载 psqlodbc_09_06_0200-x86.zip。 (如果您安装了 64 位 Office,请使用 x64。)

您也许可以尝试使用 psqlodbc_09_06_0200-x86.zippsqlodbc_09_06_0500-x86.zip 之间的驱动程序版本,因为该错误可能是在这两个版本之间的某个地方引入的。

【讨论】:

    【解决方案2】:

    您可以通过删除导航步骤并查询您需要抛出 SQL 语句的信息来跳过此错误。

    例如,如果您想从 LineItemExport 重试某些信息,默认查询是这样的:

    let
        Source = Odbc.DataSource("dsn=name", [HierarchicalNavigation=true]),
        quickbase_Database = Source{[Name="quickbase",Kind="Database"]}[Data],
        public_Schema = quickbase_Database{[Name="public",Kind="Schema"]}[Data],
        LineItemExport = public_Schema{[Name="LineItemExport",Kind="View"]}[Data]
    in
        LineItemExport
    

    您必须在查询编辑器中更改源步骤或将代码更改为以下内容:

    let
        Source = Odbc.Query("dsn=name", "select * from public.LineItemExport")
    in
        Source
    

    这是您可以克服错误的方法,否则您应该尝试更改驱动程序版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多