powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / навернулась табличка. как вытянуть часть данных?
25 сообщений из 63, страница 2 из 3
навернулась табличка. как вытянуть часть данных?
    #39495456
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Константин Сергеевич Дерерк]qwwqпропущено...



т.е. это второе число из скобочек?


Просто первое точно около 500 есть.
мальтчик, ты дуяк ?

пейвое чисьо -- это номей бьока, он, номер, могабыть очень бальшоой
втайое -- это номей запейси в блоке
блок обычно 8кб
запись не менее .... (спросить у максима, оверхед немного от версии пж плавает)
т.е. запейсей на блоке не более ....
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495462
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqпропущено...

мальтчик, ты дуяк ?

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



Правельно ли понял что максимальная может быть

(8000,292)

?


чет запутался
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495467
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq ,на счет кода, там в цикле выполняются эти действия:

[quot Константин Сергеевич Дерерк]

INSERT INTO kdv_repaired_table
SELECT * FROM corrupted_table cl
WHERE cl.ctid=tid_var;
EXCEPTION
--WHEN undefined_column THEN
WHEN OTHERS THEN
RAISE NOTICE ''SQLSTATE: %'', SQLSTATE;
END;
[/src]
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495473
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дереркqwwq ,на счет кода, там в цикле выполняются эти действия:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO kdv_repaired_table
SELECT *  FROM corrupted_table cl
WHERE  cl.ctid=tid_var;
    EXCEPTION
    --WHEN undefined_column THEN
    WHEN OTHERS THEN
    RAISE NOTICE ''SQLSTATE: %'', SQLSTATE;
    END;


блок не читается целиком, думается.
зачем вам 292 нотиса на блок выдавать ?

т.ч. покажите весь код.
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495478
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqКонстантин Сергеевич Дереркqwwq ,на счет кода, там в цикле выполняются эти действия:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO kdv_repaired_table
SELECT *  FROM corrupted_table cl
WHERE  cl.ctid=tid_var;
    EXCEPTION
    --WHEN undefined_column THEN
    WHEN OTHERS THEN
    RAISE NOTICE ''SQLSTATE: %'', SQLSTATE;
    END;


блок не читается целиком, думается.
зачем вам 292 нотиса на блок выдавать ?

т.ч. покажите весь код.








Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE OR REPLACE FUNCTION repaired_table_func() RETURNS integer AS '

DECLARE 
	tid_var tid;
BEGIN
FOR tid_var IN
        SELECT (point(b,n))::text::tid AS ctid FROM generate_series(0, 2048) b,generate_series(0, 300) n
    LOOP
	BEGIN
INSERT INTO repaired_table
SELECT *  FROM table cl
WHERE  cl.ctid=tid_var;
    EXCEPTION
    WHEN OTHERS THEN
    RAISE NOTICE ''SQLSTATE: %'', SQLSTATE;
    END;
        END LOOP;
return 0;
END;
' LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495479
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>зачем вам 292 нотиса на блок выдавать ?


а сколько лучше сделать максимально?
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495481
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерк,

А еще очень интересно прикинуть сколько там в транзакции savepoints получается (там будет со временем сильно нелинейное замедление от количества savepoints).
И подумать почему такие вещи не делают в транзакции или хранимке а вызывают запросы внешним приложением.

--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495488
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukКонстантин Сергеевич Дерерк,

А еще очень интересно прикинуть сколько там в транзакции savepoints получается (там будет со временем сильно нелинейное замедление от количества savepoints).
И подумать почему такие вещи не делают в транзакции или хранимке а вызывают запросы внешним приложением.

--
Maxim Boguk
dataegret.ru


можно ли там commit впихнуть после каждого инсерта и ускорит ли это процедуру?
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495495
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич ДереркMaxim BogukКонстантин Сергеевич Дерерк,

А еще очень интересно прикинуть сколько там в транзакции savepoints получается (там будет со временем сильно нелинейное замедление от количества savepoints).
И подумать почему такие вещи не делают в транзакции или хранимке а вызывают запросы внешним приложением.

--
Maxim Boguk
dataegret.ru


можно ли там commit впихнуть после каждого инсерта и ускорит ли это процедуру?

Нельзя... транзакции внутри pl/pgsql (да и прочих pl/*) - не поддерживаются.
Я не зря про внешнее приложение написал :).

--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495500
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukКонстантин Сергеевич Дереркпропущено...



можно ли там commit впихнуть после каждого инсерта и ускорит ли это процедуру?

Нельзя... транзакции внутри pl/pgsql (да и прочих pl/*) - не поддерживаются.
Я не зря про внешнее приложение написал :).

--
Maxim Boguk
dataegret.ru


а как вызвать внешнее приложение из кода? о_О
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495501
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukКонстантин Сергеевич Дереркпропущено...



можно ли там commit впихнуть после каждого инсерта и ускорит ли это процедуру?

Нельзя... транзакции внутри pl/pgsql (да и прочих pl/*) - не поддерживаются.
Я не зря про внешнее приложение написал :).

--
Maxim Boguk
dataegret.ru
use dblink ,Luke
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495503
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерк
а как вызвать внешнее приложение из кода? о_О
CREATE EXTENSION dblink;
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495505
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqКонстантин Сергеевич Дерерка как вызвать внешнее приложение из кода? о_О
CREATE EXTENSION dblink;

он установлен, просто там куча разных вызовов.

dblink_build_sql_insert

например.
но описание там мутное какое-то

Как лучше вызвать инсерт в данном случае?
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495509
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дереркqwwqпропущено...

CREATE EXTENSION dblink;

он установлен, просто там куча разных вызовов.

dblink_build_sql_insert

например.
но описание там мутное какое-то

Как лучше вызвать инсерт в данном случае?
как напишешь, так и лучше

я бы dblink_exec дергал, думается. а чтобы не обрабатывать ошибки в головной -- fail_on_error:=true , и вперед
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495528
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqКонстантин Сергеевич Дереркпропущено...


он установлен, просто там куча разных вызовов.

dblink_build_sql_insert

например.
но описание там мутное какое-то

Как лучше вызвать инсерт в данном случае?
как напишешь, так и лучше

я бы dblink_exec дергал, думается. а чтобы не обрабатывать ошибки в головной -- fail_on_error:=true , и вперед

вот тако вылезло

Код: sql
1.
Подробности: FATAL:  sorry, too many clients already




как закрывать грамотно соединения, чтобы коннекты не висели?
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495551
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерк,

а незачем их открывать бессчётно.
открыли одно, именное. и в него ходитя
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495786
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqКонстантин Сергеевич Дерерк,

а незачем их открывать бессчётно.
открыли одно, именное. и в него ходитя




ERROR: duplicate connection name
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39495847
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич ДереркqwwqКонстантин Сергеевич Дерерк,

а незачем их открывать бессчётно.
открыли одно, именное. и в него ходитя




ERROR: duplicate connection name
example dblink--connection
Код: 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.
do
$dod$
declare
	conname CONSTANT text := 'test';
	res	text;
begin
	IF conname = any(dblink_get_connections()) 
	then --do nothing
	else
		PERFORM dblink_connect (conname,'dbname='||current_database());		
	end if;

	FOR i IN 1..10 
	LOOP
		if i % 2 =0 then
			res:= dblink_exec(conname
				,$dbl$
					do
					$dbld$
					BEGIN
						RAISE EXCEPTION 'yoptel`';
					END;
					$dbld$;
				$dbl$::text
				,false);
		else
			res:= dblink_exec(conname,
				$dbl$create table if not exists test as SELECT 1 as a;
					INSERT INTO test SELECT 2; $dbl$::text
				,false);
		end if;
		raise notice '	i %	%' ,i,res;
	END LOOP;
	PERFORM dblink_disconnect (conname);
end;
$dod$

...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496164
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqКонстантин Сергеевич Дереркпропущено...





ERROR: duplicate connection name
example dblink--connection
Код: 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.
do
$dod$
declare
	conname CONSTANT text := 'test';
	res	text;
begin
	IF conname = any(dblink_get_connections()) 
	then --do nothing
	else
		PERFORM dblink_connect (conname,'dbname='||current_database());		
	end if;

	FOR i IN 1..10 
	LOOP
		if i % 2 =0 then
			res:= dblink_exec(conname
				,$dbl$
					do
					$dbld$
					BEGIN
						RAISE EXCEPTION 'yoptel`';
					END;
					$dbld$;
				$dbl$::text
				,false);
		else
			res:= dblink_exec(conname,
				$dbl$create table if not exists test as SELECT 1 as a;
					INSERT INTO test SELECT 2; $dbl$::text
				,false);
		end if;
		raise notice '	i %	%' ,i,res;
	END LOOP;
	PERFORM dblink_disconnect (conname);
end;
$dod$




Благодарю.


Получилось реализовать через дблинки, но работает еще медленнее чем инсерт напрямую.
судя по сообщениям о невозможности считать строку.
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496186
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще жаль что в постгресс нет стандартного механизма востановления таблички при повреждении
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496191
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерк<>
Получилось реализовать через дблинки, но работает еще медленнее чем инсерт напрямую.
судя по сообщениям о невозможности считать строку.
код всё такой же ? позаписный ?

идите поблочно. == есть такая мысль, если блок не читается -- он не читается целиком. могу врать. (проверьте на каком либо точно битом блоке -- сможете ли найти хоть одну запись в нем, адресуясь ctid-ом)
тогда при первой ошибке в блоке переходите к новому.

и писать можно сразу весь блок . -- я же писал ( 20677291 ) примерно :

Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
  FROM XXXXXX
  WHERE ctid = ANY(array((
	SELECT (point(10000,n))::text::tid AS ctid FROM generate_series(0, 270) n
	)))
;



где 10000 -- номер блока. 0--270 номера записей в блоке. (если табличка широкая -- можно взять уже. и кажется они (строки) таки с 1 идут. блоки -- как положено -- с 0 ).
но в любом случае это забавный способ ковырять землю мелкоскопом. имхо.
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496195
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерквообще жаль что в постгресс нет стандартного механизма востановления таблички при повреждении

если вы теряете записи -- кто ж вам сторож, злобному буратинию.
выковыривать куски из обломков -- это не дело в любом случае.
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496198
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqесть такая мысль, если блок не читается -- он не читается целиком. могу врать.


судя по всему, так и есть.
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496203
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, автовакуум блоки меняет местами?
...
Рейтинг: 0 / 0
навернулась табличка. как вытянуть часть данных?
    #39496267
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерккстати, автовакуум блоки меняет местами?

Нет. И даже записи местами не меняет.
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 2 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / навернулась табличка. как вытянуть часть данных?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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