Pav*_* V. 5 postgresql windows installation visual-studio-2010
我尝试在 Windows XP 32 位和 Visual Studio 2010 上通过 @PavelStehule(Erwin Brandstetter在这个答案中向我推荐它)构建plpgsql_check 扩展(我将本文用作手册)。但是,我收到以下错误:
error LNK2001: unresolved external symbol _exec_get_datum_type
error LNK2001: unresolved external symbol _plpgsql_compile
error LNK2001: unresolved external symbol _plpgsql_build_datatype
error LNK2001: unresolved external symbol _plpgsql_stmt_typename
error LNK2001: unresolved external symbol _plpgsql_parser_setup
Run Code Online (Sandbox Code Playgroud)
此外,还有两个 IntelliSense 错误:expected a ')'
在 plpgsql.h(第 923 行和第 953 行 - 都在与数据相关的函数中) - 我希望这些是错误警报(如果它们很重要,如何解决它们?)。
经过一番谷歌搜索后,我发现有人在 OS X 上遇到了类似的问题。问题是 plpgsql.so 要么没有链接,要么没有工作。我的电脑上没有 plpgsql.so,但我有 plpgsql.dll 应该对应它。所以我链接了它,错误改变了:
error LNK1107: invalid or corrupt file: cannot read at 0x2A8
Run Code Online (Sandbox Code Playgroud)
这个动态库是 PostgreSQL 发行版的一部分,所以它不应该被破坏。但是,恐怕 Pavel 在链接讨论中所写的内容适用于此处:
它需要针对 plpgsql.so 的链接。我没有针对 clang 测试它——我记得和 Tom Lane 的一次谈话,他很惊讶所以这段代码可以工作,并且可能在某些平台上不可用。
...
没有人预料到会从其他扩展中使用 plpgsql - 并且环境没有准备好:(
最糟糕的情况是 plpgsql 检查器扩展在 Windows 下根本不可用,因为对于如此强大的魔法来说,它的法力值太低了。:-) 如果我只需要一种不同的方法,请指点我。
小智 1
您可以在 Google 网上论坛上找到 Adam Bartoszewicz 的说明(也发布在 Pavel Stehule 的博客上):
- 从http://www.enterprisedb.com下载并安装适用于 Win32 的 PostgreSQL 9.3.4
- 下载并安装 Microsoft Visual C++ 2010 Express
- 学习教程http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows
- plpgsql_check依赖于plpgsql,我们需要将plpgsql.lib添加到库列表中。不幸的是 PostgreSQL 9.4.3 不包含这个库。
- 从 plpgsql.dll 创建 plpgsql.lib,如http://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll中所述
- 更改 plpgsql_check.c 文件,在 evry 扩展函数之前添加 PGDLLEXPORT 行,如http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows
...
PGDLLEXPORT Datum plpgsql_check_function_tb(PG_FUNCTION_ARGS);中所述 PGDLLEXPORT 数据 plpgsql_check_function(PG_FUNCTION_ARGS);
...
PGDLLEXPORT 数据 plpgsql_check_function(PG_FUNCTION_ARGS) { Oid funcoid = PG_GETARG_OID(0);
...
PGDLLEXPORT 数据 plpgsql_check_function_tb(PG_FUNCTION_ARGS) { Oid funcoid = PG_GETARG_OID(0);
...- 构建 plpgsql_check.dll
- 安装插件
- 将 plpgsql_check.dll 复制到 PostgreSQL\9.3\lib
- 将 plpgsql_check.control 和 plpgsql_check--0.8.sql 复制到 PostgreSQL\9.3\share\extension
归档时间: |
|
查看次数: |
381 次 |
最近记录: |