Обсуждение: hooks not working in postgresql 9.3 (building from source)
hi,
I need to use the hook feature of planner in postgresql 9.3 to perform a task. I am building postgresql from source.
To start with, I wanted to know how to create a hook and attach that shared libray to postgresql. Hence i tried the examples given in "wiki.postgresql.org/images/e/e3/Hooks_in_postgresql.pdf" and
I have copied the "my_client_auth.c" file and Makefile into contrib/client_auth folder. make and make install is working fine.
This is the output of make install.
/bin/mkdir -p '/home/rajmohan/projects/lib/postgresql'
/usr/bin/install -c -m 755 my_client_auth.so '/home/rajmohan/projects/lib/postgresql/'
after that i have added shared_preload_libraries = 'my_client_auth' to postgresql.conf
Then i added the line
ClientAuthentication_hook_type client_auth_hook = NULL; at the top of a file say planner.c in postgresql code
and inside a method im checking client_auth_hook value. When i rebuild and run the project,
client_auth_hook value is always zero. It seems my_client_auth.so file is not linked properly to my postgresql project.
Am i missing any step? how to access methods in my_client_auth.so from postgresql. Kindly help
On Thu, May 1, 2014 at 12:33 AM, Rajmohan C <csrajmohan@gmail.com> wrote: > I need to use the hook feature of planner in postgresql 9.3 to perform a > task. I am building postgresql from source. This hook is called planner_hook_type and is present in planner.c. > To start with, I wanted to know how to create a hook and attach that shared > libray to postgresql. Hence i tried the examples given in > "wiki.postgresql.org/images/e/e3/Hooks_in_postgresql.pdf" and > "https://github.com/gleu/Hooks-in-PostgreSQL/tree/master/examples/my_client_auth". > I have copied the "my_client_auth.c" file and Makefile into > contrib/client_auth folder. make and make install is working fine. > This is the output of make install. > > /bin/mkdir -p '/home/rajmohan/projects/lib/postgresql' > /usr/bin/install -c -m 755 my_client_auth.so > '/home/rajmohan/projects/lib/postgresql/' > after that i have added shared_preload_libraries = 'my_client_auth' to > postgresql.conf This is fine. > Then i added the line > ClientAuthentication_hook_type client_auth_hook = NULL; at the top of a file > say planner.c in postgresql code > and inside a method im checking client_auth_hook value. When i rebuild and > run the project, > client_auth_hook value is always zero. Well, you are trying to create a new hook here, and not to use an existing one. You do not need to modify the source code of PostgreSQL when using hooks, that's what make their strength. > It seems my_client_auth.so file is > not linked properly to my postgresql project. > Am i missing any step? how to access methods in my_client_auth.so from > postgresql. Kindly help Are you sure that you set up properly shared_preload_libraries = 'my_client_auth' and then restarted the PostgreSQL server. If the hook library is properly loaded by server, you should see a message similar to that if of course server is pretty verbose when logging things: LOG: loaded library "my_client_auth" You can as well try a hook on an existing session by using LOAD. -- Michael