powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли добавить в dblink timeout ?
9 сообщений из 9, страница 1 из 1
Можно ли добавить в dblink timeout ?
    #39619386
Доброе утро.


Суть такая:

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


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




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

Чтобы после, например 10 секунд от просто отключался.
...
Рейтинг: 0 / 0
Можно ли добавить в dblink timeout ?
    #39619410
Rhim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Можно ли добавить в dblink timeout ?
    #39619417
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалитель таблиц,
Код: 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
Можно ли добавить в dblink timeout ?
    #39619587
qwwq, Rhim большое спасибо, работает!
...
Рейтинг: 0 / 0
Можно ли добавить в dblink timeout ?
    #39620991
Мужики, таймаут работает отлично.

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


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



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

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

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

трабля с
Код: plaintext
Class 57 — Operator Intervention
боюсь -- воркерами обеспеченная.
...
Рейтинг: 0 / 0
Можно ли добавить в dblink timeout ?
    #39621175
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
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли добавить в dblink timeout ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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