Как можно вставить сразу много случайных данных разного типа в Postgresql
CREATE TABLE "user"
(
id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
first_name VARCHAR(255),
last_name VARCHAR(255),
email VARCHAR(255),
password VARCHAR(60),
role VARCHAR(255),
enabled BOOLEAN NOT NULL DEFAULT FALSE,
CONSTRAINT pk_user PRIMARY KEY (id)
);
INSERT INTO "user" (
first_name,
last_name,
email,
password,
role,
enabled)
VALUES (
repeat(substr(gen_random_uuid()::text, 1, 10), 5),
repeat(substr(gen_random_uuid()::text, 1, 10), 5),
/*генерирует email*/
repeat(substr(gen_random_uuid()::text, 2, 5 )
|| '@' ||
substr(gen_random_uuid()::text, 2, 5)
|| '.com', 5),
repeat(substr(gen_random_uuid()::text, 1, 10),5),
/*каждый раз рандомно выбирает из предоставленного списка
случайное значение*/
repeat((array['ADMIN', 'MANAGER', 'USER'])[floor(random() * 3 + 1)], 5),
repeat((array[true, false])[floor(random() * 2 + 1)], 5)
);
Хочется сгенерировать сразу несколько строк.
generate_series() - не подойдет, ну по крайней мере я не смог его приспособить.
Функция repeat() работает для строк, но для остальных типов данных - не работает. Кто знает, как можно решить такую проблему ?
Ответы (1 шт):
Автор решения: skyho
→ Ссылка
Возможно вот так
INSERT INTO "user" (id,
first_name,
last_name,
email,
password,
role,
enabled)
VALUES (generate_series(1, 50),
substr(gen_random_uuid()::text, 1, 10),
substr(gen_random_uuid()::text, 1, 10),
/*генерирует email*/
substr(gen_random_uuid()::text, 2, 5 )
|| '@' ||
substr(gen_random_uuid()::text, 2, 5)
|| '.com',
substr(gen_random_uuid()::text, 1, 10),
/*каждый раз рандомно выбирает из предоставленного списка
случайное значение*/
(array['ADMIN', 'MANAGER', 'USER'])[floor(random() * 3 + 1)],
(array[true, false])[floor(random() * 2 + 1)]
);
или так
INSERT INTO "user"
SELECT generate_series(1, 50),
substr(gen_random_uuid()::text, 1, 10),
substr(gen_random_uuid()::text, 1, 10),
substr(gen_random_uuid()::text, 2, 5)
|| '@' ||
substr(gen_random_uuid()::text, 2, 5)
|| '.com',
substr(gen_random_uuid()::text, 1, 10),
(array ['ADMIN', 'MANAGER', 'USER'])[floor(random() * 3 + 1)],
(array [true, false])[floor(random() * 2 + 1)];
может кто предложит другое решение, если это по какой-то причине не очень подходит...