|
|
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
Всем добрый день! Решил попробовать plproxy, так сказать пощупать в реальности. Сначала скачал отсюда: ссылка Но наткнулся на ошибку авторОШИБКА: несовместимая библиотека "/usr/lib/postgresql/9.1/lib/plproxy.so": несоответствие отличительного блока DETAIL: В сервере NAMEDATALEN = 256, в библиотеке: 64. Тогда пошёл другим путём.. Скачал отсуда ссылка Установил необходимые пакеты. Затем MAKE, MAKE INSTALL. Все с компилировалось, установилось. Затем пошел по учебнику, опробовать пример. Использовался материал книги А.Ю. Васильев "Работа с PostgreSQL" Такой же пример был описан на хабре Только я Bouncer не использовал. Создал все функции, ноды.. авторCREATE OR REPLACE FUNCTION public.plproxy_call_handler() RETURNS language_handler AS '$libdir/plproxy', 'plproxy_call_handler' LANGUAGE 'c' VOLATILE COST 1; ALTER FUNCTION public.plproxy_call_handler() OWNER TO reppostgres; -- language CREATE TRUSTED LANGUAGE plproxy HANDLER plproxy_call_handler; CREATE OR REPLACE FUNCTION plproxy_fdw_validator(text[], oid) RETURNS boolean AS '$libdir/plproxy' LANGUAGE C; CREATE FOREIGN DATA WRAPPER plproxy VALIDATOR plproxy_fdw_validator; ------------------------------------------------------------ CREATE OR REPLACE FUNCTION public.get_cluster_config ( IN cluster_name text , OUT "key" text , OUT val text ) RETURNS SETOF record AS $BODY$ BEGIN -- lets use same config for all clusters key := 'connection_lifetime' ; val := 30*60; -- 30m RETURN NEXT; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION public.get_cluster_config(text) OWNER TO reppostgres ; CREATE OR REPLACE FUNCTION public.get_cluster_partitions( cluster_name text ) RETURNS SETOF text AS $BODY$ BEGIN IF cluster_name = 'usercluster' THEN RETURN NEXT 'dbname=CREATE OR REPLACE VIEWtest host=192.168.4.26 port=5431 user=postgres' ; RETURN NEXT 'dbname=CREATE OR REPLACE VIEWtest host=192.168.4.26 port=5432 user=postgres' ; RETURN; END IF ; RAISE EXCEPTION 'Unknown cluster' ; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION public.get_cluster_partitions(text) OWNER TO reppostgres; CREATE OR REPLACE FUNCTION public.get_cluster_version ( cluster_name text ) RETURNS integer AS $BODY$ BEGIN IF cluster_name = 'usercluster' THEN RETURN 1 ; END IF ; RAISE EXCEPTION 'Unknown cluster' ; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; ALTER FUNCTION public.get_cluster_version(text) OWNER TO reppostgres; CREATE OR REPLACE FUNCTION public.insert_user ( i_username text , i_emailaddress text ) RETURNS integer AS $BODY$ CLUSTER 'usercluster' ; RUN ON hashtext ( i_username, i_emailaddress ) ; $BODY$ LANGUAGE 'plproxy' COST 100; ALTER FUNCTION public.insert_user(text, text) OWNER TO reppostgres; CREATE OR REPLACE FUNCTION public.get_user_email(i_username text) RETURNS SETOF text AS $BODY$ CLUSTER 'clustertest'; RUN ON hashtext(i_username) ; SELECT email FROM public.users WHERE username = i_username; $BODY$ LANGUAGE 'plproxy' COST 100 ROWS 1000; ALTER FUNCTION public.get_user_email(text) OWNER TO reppostgres; --select insert_user('sa2','mail@mail.ru'); --select public.get_user_email('Steve'); В дальнейшем при вызове : select insert_user('sa2','mail@mail.ru'); Выдаётся ошибка: авторОШИБКА: PL/Proxy functions must be volatile ********** Ошибка ********** ОШИБКА: PL/Proxy functions must be volatile SQL-состояние: XX000 Никто не подскажет в чем может быть дело? Может кто сталкивался? Версия ОС: Linux cpi-m-db-psql-oper 3.2.0-27-generic #43astra9 SMP Fri Nov 2 01:34:28 MSK 2012 x86_64 GNU/Linux PlProxy 2.3 PostrgeSQL: PostgreSQL 9.1.6 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.1-2) 4.7.1, 64-bit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 11:43 |
|
||
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
inforse, У вас у некоторых функций есть спецификатор VOLATILE, но не у всех. Пересоздайте все функции как VOLATILE и пробуйте ещё раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 12:25 |
|
||
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
vyegorov, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. Я пере создавал несколько раз, просто в скрипте который здесь выложил забыл поправить. На всякий случай еще раз пересоздал. Тоже самое пишет. На стороне нодов тоже у всех стоит VOLATILE :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 14:50 |
|
||
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
очень извиняюсь в листинге ошибка закралась Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 15:27 |
|
||
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
inforse, А вытащите из лога базы всё, что касается ошибки — там обычно есть CONTEXT с запросом (и, наверно, названием функции) и DETAIL, и может ещё и HINT какой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 15:39 |
|
||
|
plproxy ОШИБКА functions must be volatile
|
|||
|---|---|---|---|
|
#18+
vyegorov, Вот достал из логов сервера, кусок Код: sql 1. 2. 3. 4. 5. 6. 7. Больше ничего не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 15:55 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=94&tid=1997345]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 319ms |

| 0 / 0 |
