Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли добавить в dblink timeout ? / 9 сообщений из 9, страница 1 из 1
23.03.2018, 11:53
    #39619386
Можно ли добавить в dblink timeout ?
Доброе утро.


Суть такая:

выполняется несколько запросов по dblink.


Иногда бывает ситуация когда запрос выполняется не 1 сек, а подвисает и висит очень долго.




Есть ли возможность ограничить время выполнения запроса в dblink?

Чтобы после, например 10 секунд от просто отключался.
...
Рейтинг: 0 / 0
23.03.2018, 12:26
    #39619410
Rhim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли добавить в dblink timeout ?
dblink_connect

connstr
libpq-style connection info string, for example hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd options=-csearch_path=. For details see Section 32.1.1. Alternatively, the name of a foreign server.

Example:

host=localhost port=5432 dbname=mydb connect_timeout=10
...
Рейтинг: 0 / 0
23.03.2018, 12:36
    #39619417
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли добавить в dblink timeout ?
Удалитель таблиц,
Код: sql
1.
2.
3.
4.
SELECT dblink_connect('test', 'dbname=postgres user=postgres password=postgres options=-cstatement_timeout=3000');
select * from dblink('test','select 1') as t (f int);
select (f::pg_settings).* from dblink('test', 'SELECT (t.*)::text FROM pg_settings t WHERE name =''statement_timeout''') as t (f text);
select * from dblink('test', 'SELECT pg_sleep(3)') as t (f text);



букварь тут : https://postgrespro.ru/docs/postgrespro/9.6/libpq-connect#libpq-connstring
...
Рейтинг: 0 / 0
23.03.2018, 15:25
    #39619587
Можно ли добавить в dblink timeout ?
qwwq, Rhim большое спасибо, работает!
...
Рейтинг: 0 / 0
27.03.2018, 11:00
    #39620991
Можно ли добавить в dblink timeout ?
Мужики, таймаут работает отлично.

Но не получается его в эксэпшн отловить.


Даже когда ставлю overs - в эксэпшн он не падает.



Подскажите пожалуйста как его эксэпшном поймать можно?
...
Рейтинг: 0 / 0
27.03.2018, 11:37
    #39621023
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли добавить в dblink timeout ?
Удалитель таблиц,

Пробуйте перехватить исключение sqlclient_unable_to_establish_sqlconnection (да и вообще группу исключений Class 08 — Connection Exception)
...
Рейтинг: 0 / 0
27.03.2018, 11:39
    #39621027
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли добавить в dblink timeout ?
Удалитель таблиц,

да, херня какаято. но вот так или вот так работает:
Код: 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.
do $dddd$
declare
	res text;
	_r record;
begin
	begin 
		res:=dblink_connect('test', 'host=unknown dbname=postgres user=postgres password=postgres connect_timeout=3');
	exception when others then
		raise notice 'connect_timeout %',SQLERRM;
	END;
	if 'test' = any(dblink_get_connections()) THEN 
			res:=dblink_disconnect('test');
	end if;
	res:=dblink_connect('test', 'dbname=postgres user=postgres password=postgres options=-cstatement_timeout=3000');
	select * from dblink('test','select 1') as t (f int) INTO _r;
	select (f::pg_settings).* from dblink('test', 'SELECT (t.*)::text FROM pg_settings t WHERE name =''statement_timeout''') as t (f text)  INTO _r;
	raise notice '%',_r::text;

--вар 1

	select * from dblink('test', 'SELECT pg_sleep(3)',false) as t (f text) INTO _r;
	raise notice '%' ,dblink_error_message( 'test');

	--WTF:
	begin
		BEGIN
			raise notice 'try' ;
			select * from dblink('test', 'SELECT pg_sleep(3)') as t (f text) INTO _r;
		EXCEPTION when OTHERS then
			raise notice '1.statement_timeout %',SQLERRM;
		END;
--вар2
	EXCEPTION WHEN SQLSTATE '57014' THEN
			raise notice '57014.statement_timeout %',SQLERRM;
	END;

end;
$dddd$

...
Рейтинг: 0 / 0
27.03.2018, 11:43
    #39621031
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли добавить в dblink timeout ?
ursidoУдалитель таблиц,

Пробуйте перехватить исключение sqlclient_unable_to_establish_sqlconnection (да и вообще группу исключений Class 08 — Connection Exception)

трабля с
Код: plaintext
Class 57 — Operator Intervention
боюсь -- воркерами обеспеченная.
...
Рейтинг: 0 / 0
27.03.2018, 13:55
    #39621175
Можно ли добавить в dblink timeout ?
qwwqУдалитель таблиц,

да, херня какаято. но вот так или вот так работает:
Код: 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.
do $dddd$
declare
	res text;
	_r record;
begin
	begin 
		res:=dblink_connect('test', 'host=unknown dbname=postgres user=postgres password=postgres connect_timeout=3');
	exception when others then
		raise notice 'connect_timeout %',SQLERRM;
	END;
	if 'test' = any(dblink_get_connections()) THEN 
			res:=dblink_disconnect('test');
	end if;
	res:=dblink_connect('test', 'dbname=postgres user=postgres password=postgres options=-cstatement_timeout=3000');
	select * from dblink('test','select 1') as t (f int) INTO _r;
	select (f::pg_settings).* from dblink('test', 'SELECT (t.*)::text FROM pg_settings t WHERE name =''statement_timeout''') as t (f text)  INTO _r;
	raise notice '%',_r::text;

--вар 1

	select * from dblink('test', 'SELECT pg_sleep(3)',false) as t (f text) INTO _r;
	raise notice '%' ,dblink_error_message( 'test');

	--WTF:
	begin
		BEGIN
			raise notice 'try' ;
			select * from dblink('test', 'SELECT pg_sleep(3)') as t (f text) INTO _r;
		EXCEPTION when OTHERS then
			raise notice '1.statement_timeout %',SQLERRM;
		END;
--вар2
	EXCEPTION WHEN SQLSTATE '57014' THEN
			raise notice '57014.statement_timeout %',SQLERRM;
	END;

end;
$dddd$





Изящно!


Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли добавить в dblink timeout ? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]