Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2016 09:32:14

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

PLPython Locked tables

ДОбрый день!
Есть код работающий и написанный функцией в Postgresql.
Все бы прекрасно - но в виду определенных обстоятельств иногда таблица в которую нужно писать данные залочена! Соответственно функция при отработке зависает на инсерте и все - пишите письма! Как можно обработать данное исключение или поставить таймаут?
Благодарю!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#2 Сен. 1, 2016 09:54:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PLPython Locked tables

ZerG
Есть код работающий и написанный функцией в Postgresql.
Пример кода скинь.



Офлайн

#3 Сен. 1, 2016 12:00:22

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

PLPython Locked tables


plpy.execute(“INSERT into table_name VALUES (1, 2, 3)”)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Сен. 1, 2016 13:22:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PLPython Locked tables

Полный кусок скинь, чтобы я его запустить мог. Потому что у меня даже модуль не установлен. Чтобы его установить, нужно понять, чем ты пользуешься (потому что часто их дохрена этих модулей). Чтобы убедиться, что ты там правильно всё открыл, нужен твой кусок кода, который ты написал. Может, ты где-то там пропёрся при настройках и не понимаешь этого.



Офлайн

#5 Сен. 1, 2016 14:26:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

PLPython Locked tables

Какие настройки????
Ето встроенный в POstgresql модуль поддержки питона!
Я не импортирую никаких там psycopg2 и так далее

 CREATE OR REPLACE FUNCTION public.py_parser_mail()
 RETURNS text
 LANGUAGE plpythonu
AS $function$
# -*- coding: utf-8 -*-
plpy.notice('START FUNC')
rmess = 'Done'
plpy.execute(INSERT into table_name VALUES (1, 2, 3))
return rmess
$function$

Ну разумеется это к примеру. Но это рабочий пример.
Суть в том что когда table_name залочена - то инсерт залипает и функция постгреса вся - вешается! Вот мне и нужно исключение по локу или таймаут добавить! и делать выход по исключению!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Сен. 2, 2016 05:03:04

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

PLPython Locked tables

Может перед инсертом проверять наличие блокировки на таблице?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Сен. 2, 2016 06:42:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PLPython Locked tables

postgresql.org. config

statement_timeout (integer)

Abort any statement that takes over the specified number of milliseconds, starting from the time the command arrives at the server from the client. If log_min_error_statement is set to ERROR or lower, the statement that timed out will also be logged. A value of zero (the default) turns this off.

Setting statement_timeout in postgresql.conf is not recommended because it affects all sessions.
Посмотри эту переменную в настройках.

postgresql.org. plpy
Здесь примеры функций. Посмотри, как они записаны, и свою функцию так же запиши.



Офлайн

#8 Сен. 15, 2016 08:53:00

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2584
Репутация: +  60  -
Профиль   Отправить e-mail  

PLPython Locked tables

Конфиг поси трогать не могу по ряду причин! Там свои спец настройки и их менять нельзя.
Примеры функций видел!
Собственно мысль пока что была только одна - перед инсертом делать отдельно запрос на чек лока таблицы! И все бы хорошо - но логика реализации не очень понравилась!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version