Last active
September 23, 2020 08:53
-
-
Save mche/3108419bb3733399f1c90be9a59aede4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select id | |
into temp table t1 | |
FROM generate_series(1,100000000) as g(id); | |
create unique index idx_t1 on t1 (id); | |
SET random_page_cost = 0; | |
--- или random_page_cost tablespace параметр для таблицы | |
---delete from t1 where id in ( | |
select t1.id | |
from t1 | |
join ( | |
select (random() * (100000000/*max значение брать последнее значение секвенции*/ - 1/*min значение*/)+ 1/*min занчение*/)::int as rand | |
from generate_series (1, 10/*если в таблице много удалений нужно увеличивать*/) g | |
) r on t1.id=r.rand | |
limit 1 | |
---) | |
; | |
--- НЕ НУЖНО | |
CREATE OR REPLACE FUNCTION "random_t1"("max" int, "min" int default 1, "emp" int default 100) | |
RETURNS SETOF t1 AS | |
$BODY$ | |
/*** | |
Функция "random_t1"(max, min, emp) сдучайная строка из конкретной таблицы t1 с уникальной колонкой id(integer) | |
max - максимальное сейчас значение колонки id таблицы (если секвенция, то легко получить) | |
min - предполагается колонка id таблицы началась с 1, поэтому по умолчанию 1 | |
emp - фактор "пустотности" таблицы, т.е. наличие удаленных строк, если мало удалялось - малое значение, если много пустот - больше, увеличивать когда функция перестанет возвращать запись (или добавить еще цикл генераций случайных чисел) | |
Можно переделать подавать на вход название таблицы | |
Можно переделать на возврат нескольких записей | |
***/ | |
DECLARE | |
g RECORD;--- цикл нескольких случайных чисел на случай удаленных строк | |
r t1%rowtype; --- возврат | |
BEGIN | |
FOR g IN | |
select (random() * ("max" - "min")+ "min")::int as id | |
from generate_series (1, "emp") | |
LOOP | |
select into r * from t1 where id=g.id; | |
IF r is not null THEN | |
RETURN NEXT r; | |
EXIT; | |
END IF; | |
END LOOP; | |
RETURN; | |
END | |
$BODY$ | |
LANGUAGE 'plpgsql' ; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment