[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перенос данных из одной таблицы в другую
zvezda_t
Всем привет :)

У меня есть табличка tusers в ней очень много данных, мне нужно периодически часть строк из этой таблицы переносить в таблицу tusers_clone. Переношу удаленных пользователей tusers.del IS NOT NULL.

Чтобы создать tusers_clone, наследовала её от tusers (только потом убрала связь с последовательностью, чтоб новые id не создавались):

CREATE TABLE tusers_clone () INHERITS (tusers)



Скажите, пожалуйста, а сам механизм переноса можно каким-то стандартным средством БД прописать?
Может есть какое-то красивое решение?

Спасибо.

_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
bestxp
select insert есть у постгреса)
точно не помню можно даже создать таблицу из другой сразу с заполнением
TMake
zvezda_t
можно через триггер сделать или трансфер
sergeiss
Цитата (zvezda_t @ 20.08.2014 - 10:28)
Скажите, пожалуйста, а сам механизм переноса можно каким-то стандартным средством БД прописать?
Может есть какое-то красивое решение?

Да сам по себе Постгре - это одно большое красивое решение ;)

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

Твою задачу можно так решить (это не единственный вариант):
1. Вставить в потомка нужные данные из родителя
INSERT INTO tusers_clone SELECT * FROM ONLY tusers WHERE <condition>

Важно: ключевое слово ONLY говорит о том, что надо смотреть ТОЛЬКО в родительской таблице, не затрагивая потомков. <condition> - нужное тебе условие.

2. Удалить из родительской таблицы уже ненужные данные
DELETE FROM ONLY tusers WHERE <condition>

Опять используем ключевое слово ONLY, иначе мы удалим всё, подходящее под условия, во всех таблицах, включая потомков.

3. Лучше всё это сделать одной транзакцией, чтобы не получить проблемы никакие.

Читай:
http://www.postgresql.org/docs/9.1/static/sql-insert.html
http://www.postgresql.org/docs/9.1/static/sql-select.html
http://www.postgresql.org/docs/9.1/static/sql-delete.html

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
zvezda_t
sergeiss, спасибо. Важное замечание smile.gif

Я тут почитала http://postgresql.ru.net/manual/ddl-inherit.html

Так как можно определять наследование, после создания таблиц, то хочу создать общую таблицу родителя tusers_procreator для tusers и tusers_clone, тогда у меня запросы все остануться не изменными в приложении, просто к tusers, а если захочу получить данные о рабочих и удаленных пользователях - делаю запрос к таблице tusers_procreator. Сама таблица tusers_procreator будет пуста smile.gif

Так нормально? rolleyes.gif

_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
sergeiss
Цитата (zvezda_t @ 22.08.2014 - 07:57)
Так нормально?

Да, так нормально.

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
zvezda_t
Спасибо!

sergeiss, скажи пожалуйста, а запрос на выборку данных из родительской таблицы должен работать быстрее, чем представление (view) собранное из всех дочерних таблиц? rolleyes.gif




_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
sergeiss
Цитата (zvezda_t @ 25.08.2014 - 07:38)
sergeiss, скажи пожалуйста, а запрос на выборку данных из родительской таблицы должен работать быстрее, чем представление (view) собранное из всех дочерних таблиц?

Вопрос абстрактный весьма. Потому что в вопросе не сказано, каковы условия выборки.
Если "выбрать всё", то не знаю, что быстрее.
Если же данные будут реально выбраны только из нескольких партиций (согласно условию), то эта выборка должна быть быстрее.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.