@givemoneybiatch
Немного веб, немного гейм

Как скопировать поля с одной таблицы в другую?

PostgreSQL 10. Есть две таблицы связанные между собой. Таблица recording на самом деле имеет еще другие колонки, а то может показаться что таблицы одинаковые.
create table video (
  "id" serial primary key,
  "videoId" varchar(25) not null,
  "recordingId" serial REFERENCES recording (id),
  "default" varchar(100),
  "medium" varchar(100),
  "high" varchar(100),  
  unique ("videoId", "recordingId")
);

create table recording (
  "id" serial primary key,
  "videoId" varchar(15) not null,
  "default" varchar(60),
  "medium" varchar(60),
  "high" varchar(60)
);


В таблице recording записей больше чем в video, т.е. мне нужно в recording обновить не все строки , а только те, которые связанные с соотв. строками с таблицы video. Делаю так:
UPDATE recording
    SET recording."videoId" = video."videoId"
    SET recording.default = video.default
    SET recording.medium = video.medium
    SET recording.high = video.high
    FROM video
    WHERE recording.id = video."recordingId"

Обновление не происходит. Может быть причина в том, что в одной таблице varchar(60) а в другой - varchar(100)?

И еще вопрос по поводу того, как сэкономить на размере бд. Если одно поле varchar(100), а другое - varchar(60), но при этом данные в обоих по 50 символов, какое из полей будет занимать меньше места? Будет ли экономнее выделить varchar(60) или они оба будут занимать столько, сколько положено для 50 символов?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
LaRN
@LaRN
Senior Developer
Попроуйте такой запрос:

UPDATE recording
SET recording.videoId. = video.videoId
SET recording.default = video.default
SET recording.medium = video.medium
SET recording.high = video.high
FROM video
JOIN recording
ON recording.id = video.recordingId

Перед запуском update можно сделать проверочный запрос, вот такой:

Select
recording.videoId, video.videoId
recording.default, video.default
recording.medium, video.medium
recording.high, video.high
FROM video
JOIN recording
ON recording.id = video.recordingId

Запрос покажет какие записи отобрались для апдейта.

Насчёт varchar: varchar хранит столько символов сколь реально передано, а char столько, сколько указано в описании поля.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы