PostgreSQL: динамические значения строк (?) - PullRequest
0 голосов
/ 23 июня 2010

О, привет!
У меня есть две таблицы, первая (давайте назовем ее NameTable) предустановлена ​​с набором значений (id, name), а вторая (ListTable) пуста, но с такими же столбцами.
Вопрос в следующем: как я могу вставить в ListTable значение из NameTable?Так что, если я изменю одно имя в NameTable, автоматически обновляются значения в ListTable.
Есть ли для этого INSERT или таблицы должны быть созданы каким-то особым образом?
Пробовал просматривать руководство, но безуспех :(

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Предложение по использованию INSERT ... SELECT - лучший способ перемещения между таблицами в одной базе данных.

Однако есть еще один способ справиться с требованием автоматического обновления.

Похоже, это ваши критерии:

  • Таблица A определяется столбцами (x, y)
  • (x, y) уникален
  • Таблица B также определяется столбцами (x, y)
  • Таблица A является расширенной таблицей B
  • Таблица B должна быть загружена данными из таблицы A и должна синхронизироваться с ОБНОВЛЕНИЯМИ в таблице A.

Это задание для ИНОСТРАННОГО КЛЮЧА с опцией ОБНОВЛЕНИЕ КАСКАДА:

ALTER TABLE B ADD FOREIGN KEY (x,y) REFERENCES A (x,y) ON UPDATE CASCADE;

Теперь не только будет автоматически обновляться таблица B при обновлении таблицы A, таблица B защищена от пар (x, y), которых нет в таблице A. Если вы хотите, чтобы записи автоматически удалялись из таблицы В случае удаления из таблицы А добавить «ON UPDATE DELETE».

0 голосов
/ 23 июня 2010

Хммм ... Я немного запутался в том, что именно вы хотите сделать или почему, но вот несколько советов по поводу того, на что вы, возможно, захотите взглянуть: наследование таблиц, триггеры и правила.

Наследование таблиц в postgresql позволяет таблице совместно использовать данные другой таблицы. Таким образом, если вы добавите строку в базовую таблицу, она не будет отображаться в унаследованной таблице, но если вы добавите строку в унаследованную таблицу, она теперь будет отображаться в обеих таблицах, и обновления в любом месте будут отражать ее в обеих таблицах.

Триггеры позволяют настроить код, который будет запускаться при выполнении операций вставки, обновления или удаления таблицы. Это позволит вам добавить описанное вами поведение вручную.

Правила позволяют вам установить правило, которое заменит соответствующий запрос альтернативным запросом при выполнении определенного условия.

Если вы опишите свою проблему далее, например, почему вам нужно такое поведение, возможно, будет проще предложить правильный путь решения проблем: -)

...