Я работаю над проектом базы данных postgreSQL, и мне нужно генерировать большие данные довольно быстро. Итак, у меня есть таблица с именем pacient_info , где pacient_id и соответствующий doctor_id.
Теперь мне нужно сгенерировать прибл. 1 мил. строки в таблице называются экзамены , где первые два столбца должны быть pacient_id и doctor_id , а затем некоторая дата, но это не важно.
Поскольку я не могу выбрать случайный pacient_id и случайный doctor_id (эти два должны быть правильными согласно таблице pacient_info ) Я создал эту функцию
CREATE OR REPLACE FUNCTION pacient_doctor()
RETURNS TABLE (pac INT, doc INT)
AS $$
BEGIN
RETURN QUERY SELECT
pacient_id,
doctor_id
FROM pacient_info tablesample system_rows(10) order by random() LIMIT 1;
END; $$
LANGUAGE 'plpgsql';
, который возвращает один случайный кортеж из таблицы pacient_info . Наконец, когда я хотел вставить в таблицу экзаменов , я сделал это:
insert into examinations (doctor_id, pacient_id, set_date)
select
pd.pac,
pd.doc,
(SELECT set_date from dates where i != -1 order by random() LIMIT 1)
from
(SELECT * from pacient_doctor()) pd,
generate_series(1, 1000000) as seq(i);
, но это дало мне один и тот же кортеж во многих строках, поскольку между этими таблицами существует неявное CROSS JOIN , У меня нет 1 мил. строк в pacient_info , но там 4500 строк, поэтому должно быть только (1 000 000/4 500) 222 дублированных кортежа, но их гораздо больше (500, если быть точным).
Может кто-нибудь помочь мне, как заставить функцию как-то выполняться каждый раз для новой строки?
Большое спасибо!