Так что я пытаюсь пропустить генерацию фиктивных данных с помощью внешнего скрипта и вместо этого использовать generate_series () в PostgreSQL. Если я попробую меньше строк, то в лучшем случае получится сообщение «невозможно записать блок: временный файл журнала ... недостаточно места на устройстве».
Код:
CREATE TABLE posts(
id INTEGER PRIMARY KEY,
author VARCHAR(20),
likes INTEGER,
content VARCHAR(200),
posted TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO posts
SELECT DISTINCT id, author, likes, content, posted FROM
generate_series(1,10000) AS id, substr(md5(random()::text), 0, 20) AS
author, generate_series(1,10000) AS likes, md5(random()::text) AS
content, generate_series('2007-02-01'::timestamp,
'2018-04-01'::timestamp, '1 hour') AS posted;
Несколько вариантов, о которых я мог подумать:
- Это как-то вызывает фактор ветвления, и в этом случае может быть более эффективный способ записать его
- У меня недостаточно аппаратного обеспечения (i5-4210U, 8 ГБ ОЗУ, 500 ГБ HDD и около 20 ГБ
осталось места). Но я также запустил это на своем рабочем столе 2 ТБ с теми же результатами.
- Функции md5 hash или random () вызывают огромную блокировку, поэтому мой компьютер зависает в течение первых нескольких минут выполнения этого запроса.