Postgres 上的自定义插件错误 运行,"output plugins have to declare the _PG_output_plugin_init symbol"
Error running custom plugin on Postgres, "output plugins have to declare the _PG_output_plugin_init symbol"
我正在尝试为逻辑复制创建一个自定义输出插件(Postgres 是 9.5.4 版本,我正在从 Windows 8/64 位机器构建项目 - 数据库所在的同一台机器已安装)。
我从样本 test_decoding 的代码开始,我试图用一个新名称简单地重建它并将它安装到 Postgres 中以查看模块是否工作。完成后,我将开始修改代码。
我的项目是在 Visual Studio 2013 年构建的,我采取的唯一步骤是将构建的程序集复制到 Postgres lib 文件夹下。当我 运行 命令时:
postgres=# SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'my_decoding');
我收到一条错误消息:
output plugins have to declare the _PG_output_plugin_init symbol
在我的代码中,我将函数声明为 extern:
extern void _PG_init(void);
extern void _PG_output_plugin_init(OutputPluginCallbacks *cb);
并且函数体定义在它下面的某处。
实际代码只是 test_decoding 示例的副本:https://github.com/postgres/postgres/blob/REL9_5_STABLE/contrib/test_decoding/test_decoding.c
我不确定部署过程是否正常(只是复制 dll)或者是否需要采取其他步骤。任何人都可以解释一下吗?
默认情况下,Visual Studio 不会导出这些符号。您可以通过将函数声明为:
来解决此问题
extern PGDLLEXPORT void _PG_init(void);
extern PGDLLEXPORT void _PG_output_plugin_init(OutputPluginCallbacks *cb);
在 Visual Studio 中有构建 Postgres DLL 的有用指南:
http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows/
我正在尝试为逻辑复制创建一个自定义输出插件(Postgres 是 9.5.4 版本,我正在从 Windows 8/64 位机器构建项目 - 数据库所在的同一台机器已安装)。
我从样本 test_decoding 的代码开始,我试图用一个新名称简单地重建它并将它安装到 Postgres 中以查看模块是否工作。完成后,我将开始修改代码。
我的项目是在 Visual Studio 2013 年构建的,我采取的唯一步骤是将构建的程序集复制到 Postgres lib 文件夹下。当我 运行 命令时:
postgres=# SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'my_decoding');
我收到一条错误消息:
output plugins have to declare the _PG_output_plugin_init symbol
在我的代码中,我将函数声明为 extern:
extern void _PG_init(void);
extern void _PG_output_plugin_init(OutputPluginCallbacks *cb);
并且函数体定义在它下面的某处。
实际代码只是 test_decoding 示例的副本:https://github.com/postgres/postgres/blob/REL9_5_STABLE/contrib/test_decoding/test_decoding.c
我不确定部署过程是否正常(只是复制 dll)或者是否需要采取其他步骤。任何人都可以解释一下吗?
Visual Studio 不会导出这些符号。您可以通过将函数声明为:
来解决此问题extern PGDLLEXPORT void _PG_init(void);
extern PGDLLEXPORT void _PG_output_plugin_init(OutputPluginCallbacks *cb);
在 Visual Studio 中有构建 Postgres DLL 的有用指南:
http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows/