CreateLang » History » Version 6
Álvaro Herrera, 10/16/2008 08:24 AM
update for 8.3 catalog, update for PHP-embed
1 | 1 | Álvaro Herrera | = Creating the PL/php language in a PostgreSQL database = |
---|---|---|---|
2 | |||
3 | 6 | Álvaro Herrera | The first thing tou need is to have a PL/php entry in the pg_pltemplate system catalog. |
4 | |||
5 | In 8.1 and 8.2 you can insert one by issuing, as a superuser: |
||
6 | 1 | Álvaro Herrera | {{{ |
7 | INSERT INTO pg_pltemplate VALUES |
||
8 | 5 | Álvaro Herrera | ('plphp', 't', 'plphp_call_handler', 'plphp_validator', '$libdir/plphp', NULL); |
9 | 1 | Álvaro Herrera | |
10 | INSERT INTO pg_pltemplate VALUES |
||
11 | 5 | Álvaro Herrera | ('plphpu', 'f', 'plphp_call_handler', 'plphp_validator', '$libdir/plphp', NULL); |
12 | 1 | Álvaro Herrera | }}} |
13 | |||
14 | 6 | Álvaro Herrera | Note that for 8.3 you need this instead: |
15 | {{{ |
||
16 | INSERT INTO pg_pltemplate VALUES |
||
17 | ('plphp', 't', 't', 'plphp_call_handler', 'plphp_validator', '$libdir/plphp', NULL); |
||
18 | |||
19 | INSERT INTO pg_pltemplate VALUES |
||
20 | ('plphpu', 'f', 't', 'plphp_call_handler', 'plphp_validator', '$libdir/plphp', NULL); |
||
21 | }}} |
||
22 | |||
23 | 5 | Álvaro Herrera | Note you '''DON'T''' have to edit the `$libdir`. Leave it alone. It will be expanded by PostgreSQL automatically. You don't need to add the `.so` suffix either (or whatever it's called on your platform.) |
24 | |||
25 | 3 | Álvaro Herrera | This will create entries for the trusted and untrusted versions of PL/php. Note that pg_pltemplate is a shared catalog, which means you have to do it only once in any database and it will be available in all your databases automatically. |
26 | 1 | Álvaro Herrera | |
27 | In any database where you want to use PL/php you need to issue simply |
||
28 | |||
29 | {{{ |
||
30 | CREATE LANGUAGE plphp; |
||
31 | }}} |
||
32 | |||
33 | or |
||
34 | {{{ |
||
35 | CREATE LANGUAGE plphpu; |
||
36 | }}} |
||
37 | (the latter will create the untrusted version, which by default only superusers can write functions in). |
||
38 | 2 | Álvaro Herrera | |
39 | 5 | Álvaro Herrera | Now the language is ready to be used. |
40 | 1 | Álvaro Herrera | |
41 | If you receive an error similar to: |
||
42 | |||
43 | {{{ |
||
44 | 5 | Álvaro Herrera | ERROR: could not load library "/usr/local/lib/postgresql/plphp": |
45 | 2 | Álvaro Herrera | libphp4.so: cannot open shared object file: No such file or directory |
46 | 1 | Álvaro Herrera | }}} |
47 | 5 | Álvaro Herrera | |
48 | 6 | Álvaro Herrera | it means the Postmaster can't find the PHP shared library. You should probably define a LD_LIBRARY_PATH variable in the postmaster environment that points to the location where libphp.so is located (or add that path to /etc/ld.so.conf) |