Вставка тестовых записей в таблицы

Используйте идентификаторы реально вставленных клиентов, а не предполагайте, что SERIAL начнётся с 1. В PostgreSQL удобно объединить INSERT ... RETURNING и вставку покупок в одном CTE.

Короткий ответ

Что ответить на собеседовании

Используйте идентификаторы реально вставленных клиентов, а не предполагайте, что SERIAL начнётся с 1. В PostgreSQL удобно объединить INSERT ... RETURNING и вставку покупок в одном CTE.

Подробный разбор

Ответ с пояснениями

Условие

Сформировать SQL‑запросы для наполнения тестовыми данными:

  • В таблицу customers добавить несколько записей (примерно 3‑5) с полями имени.

  • В таблицу purchases добавить несколько записей, при этом:

    • customer_id должен ссылаться на существующую запись из customers;
    • purchase_date задаётся различными датами и временем.

Требования:

  • Сохранить целостность ссылок между клиентами и покупками.
  • У одного из клиентов должно быть более одного заказа.

Ответ

Используйте идентификаторы реально вставленных клиентов, а не предполагайте, что SERIAL начнётся с 1. В PostgreSQL удобно объединить INSERT ... RETURNING и вставку покупок в одном CTE.

Пример для тестовой БД:

WITH new_customers AS (
    INSERT INTO customers (name)
    VALUES ('Анна'), ('Борис'), ('Вера')
    RETURNING id, name
)
INSERT INTO purchases (customer_id, purchase_date)
SELECT c.id, v.purchased_at
FROM new_customers AS c
JOIN (VALUES
    ('Анна', TIMESTAMP '2026-01-10 10:00:00'),
    ('Анна', TIMESTAMP '2026-01-12 15:30:00'),
    ('Борис', TIMESTAMP '2026-01-11 09:00:00'),
    ('Вера', TIMESTAMP '2026-01-13 18:00:00')
) AS v(name, purchased_at) ON v.name = c.name;

Имена уникальны только внутри набора примера; связь строится с возвращёнными новыми строками. Анна получает два заказа. Команда не предназначена для повторного запуска как идемпотентный production-import.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее