0

我正在使用 cartoDB 和 Postgres 9.3,包括 PostGIS。当我尝试在 cartoDB 中创建开发用户时,出现此错误:

PG::Error: ERROR: could not access file "$libdir/odbc_fdw": No such file or directory: CREATE EXTENSION IF NOT EXISTS odbc_fdw SCHEMA publiC

此外,当我尝试在 Postgres 中运行 odbc_fdw 扩展时,我得到了同样的错误。

知道如何解决吗?

4

3 回答 3

1

看来您没有正确安装 odbc_fdw。

对于以下内容,我假设您使用的是 UNIX。

  • 查看或下载并解压源代码。
  • 看到安装了PostgreSQL,包括头文件(如果你使用安装包,这通常是一个“开发”包)。
  • 查看unixODBC及其头文件是否已安装。
  • 确保它pg_config在您的PATH.

然后切换到 odbc_fdw 目录并输入

make          # compile odbc_fdw
make install  # install it in the correct place

您可能必须进行root第二步。

PostgreSQL 搜索扩展库,例如odbc_fdw.so在您可以显示的目录中pg_config --libdir

于 2016-07-26T11:42:39.263 回答
0

可能会有所帮助:

~/dev/pg $ git clone https://github.com/CartoDB/odbc_fdw.git
... Some output ...
~/dev/pg $ sudo apt-get install unixodbc-dev postgresql-server-dev-9.5
... Some output ...
~/dev/pg $ cd odbc_fdw
~/dev/pg/odbc_fdw $ make
... Some output ...
~/dev/pg/odbc_fdw $ sudo make install
... Some output ...
~/dev/pg/odbc_fdw $ psql
psql (9.5.3)
Type "help" for help.

postgres=# create extension odbc_fdw;
CREATE EXTENSION
postgres=# CREATE SERVER odbc_server
postgres-#   FOREIGN DATA WRAPPER odbc_fdw
postgres-#   OPTIONS (dsn 'test');
CREATE SERVER
postgres=# CREATE USER MAPPING FOR postgres
postgres-#   SERVER odbc_server
postgres-#   OPTIONS (username 'root', password '');
CREATE USER MAPPING
postgres=# CREATE FOREIGN TABLE
postgres-#   odbc_table (
... Table details ...
postgres(#   );
CREATE FOREIGN TABLE
postgres=# select * from odbc_table;
ERROR:  Connecting to driver
postgres=# \q
~/dev/pg/odbc_fdw $ 
于 2016-07-26T11:41:30.280 回答
0

我们在 Windows 7 机器上遇到了这个问题,并解决了它。odbc_fdw 是这样的(对于 pg 9.6 和 64 位平台):http ://www.postgresonline.com/journal/archives/372-ODBC-FDW-now-supports-9.5-and-9.6.html

问题是:上面编译的库 .zip 有两个文件夹:

  • \lib,其中仅包含“odbc_fdw.dll”
  • \share,其中包含一个“扩展”子文件夹(包含一个 .control 文件和几个 .sql 文件)
  • 两个指令 .txt 文件

由于上述 .zip 在 .txt 文件或其他地方没有安装信息,作为没有经验的 postgres 用户,我们想复制

  • [postgres_install]\pg96\lib 下的“odbc_fdw.dll”(直接)
  • [postgres_install]\pg96\share 下的“扩展”子文件夹(直接)

并且,尝试安装扩展,得到上述错误...“无法访问文件”$libdir/odbc_fdw“:没有这样的文件或目录:”。同时发出 CLI 命令

[postgres_install]\pg_config --libdir

答案是“正确的”:“C:/POSTGR~1/pg96/lib”

直到后来我们才意识到 \lib 和 \share 都有一个“postgresql”子文件夹,我们试图移动

  • [postgres_install]\pg96\lib\postgresql 下的“odbc_fdw.dll”
  • [postgres_install]\pg96\share\postgresql 下的“扩展”子文件夹

并且,在重新启动它工作的服务后,没有错误。我们可以创建扩展,通过 odbc 连接外部服务器,并能够查询外部 mysql 测试表,将其与本地 postgreql 表连接......一切正常。

因此,错误消息有点误导,因为您无法理解是否以某种方式未正确解析“$libdir”(毕竟错误消息显示它未解析),或者如果是,为什么找不到“文件” “那里”它在哪里。而且,.zip 文件指令也没有说明在哪里安装这些文件。

当然,你必须猜测有一个隐含的“postgresql”子文件夹,在这两种情况下都要考虑。这已经足够了,在我们的案例中......

于 2017-05-25T16:04:04.230 回答