Как я могу получить свою базу данных при управлении версиями с Perl?

Вам не нужно группировать для второго запроса .. у вас нет агрегированной функции

select p.date, sum(p.pageviews) as "total_pageviews", sum(p.sessions) as "total_sessions",l.location_id, p.brand_key
FROM public.local_site_sessions p, public.location_map l
where l.affiliate_id = p.affiliate_id
group by p.date, p.brand_key, l.location_id 

union

select g.date, g.sessions , g.pages_per_session ,g.location_id, brand_key
FROM public.ga_lead g

И вам не следует использовать старое имплицитное объединение в зависимости от того, где используется явное объединение. упорядочить по последнему выбору, и вы не должны использовать псевдоним для второго выбора

select p.date, sum(p.pageviews) as "total_pageviews", sum(p.sessions) as "total_sessions",l.location_id, p.brand_key
FROM public.local_site_sessions p
INNER JOIN  public.location_map l ON  l.affiliate_id = p.affiliate_id
group by p.date, p.brand_key, l.location_id 

union

select g.date, g.sessions , g.pages_per_session ,g.location_id, brand_key
FROM public.ga_lead g
order by 1,4,5 
12
задан Community 23 May 2017 в 12:02
поделиться

4 ответа

В POPFile мы используем наше собственное решение. Мы храним номер версии схемы в дб и если программа обнаружит, что существует более новая схема, то это обновит дб соответственно. Это не является точно лучшим и большая часть забавной части нашего кода.

Честно говоря, мне не удается видеть преимущество использования DBIx:: Миграция:: Каталоги, если Вы уже не используете DBIx:: Класс. Необходимо обеспечить SQL и номера версий и дескриптор базы данных. Вы могли бы также предоставить немного больше кода, чтобы найти sql файл и и подать его к базе данных.

Конечно, наличие схемы в управлении версиями является большой премией.

3
ответ дан 2 December 2019 в 07:04
поделиться

На работе мы используем измененную версию DBIx:: Миграция (это имеет некоторые ограничения, такой как не больше, чем 10 миграций). Затем у Вас есть базовая схема, которую Вы вывели от своей базы данных и когда номер версии является слишком низким, Вы обновляете свою базу данных с помощью миграций из каталога схемы миграции.

Я также настоятельно рекомендую книгу Рефакторинга Базы данных. Среди других вещей это даст Вам превосходные методы для руководящих миграций безопасно таким способом, которым, если необходимо откатывать, Вы не теряете данные (такой как тогда, когда Вы отбрасываете столбец, Вы думаете, что Вам не нужно).

Для помощи с автоматическими расписаниями депрекации, это предлагает, я записал Devel:: Удержите от использования так, чтобы Вы не должны были помнить, когда сделать депрекации. Ваш код будет жаловаться громко для Вас (и только в тестировании, не в производстве).

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

Обновление: Ускоренная перемотка вперед несколько лет и сегодня я рекомендую sqitch. Это разработано с нуля для обработки случая подвергания базы данных при управлении версиями, не связывая Вас с конкретным языком программирования или VCS.

7
ответ дан 2 December 2019 в 07:04
поделиться

Один очень интересный проект, на который это - все еще, вероятно, маленькая молодежь для доверия, является ORLite Adam Kennedy:: Мигрируйте, который берет, это - вдохновение от миграций направляющих. Он описал очень интересный журнал по use.perl.org о его планах, и я надеюсь следить за ним для будущего.

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

6
ответ дан 2 December 2019 в 07:04
поделиться

Мы используем систему, подобную тому, что описал Manni. Два больших недостатка:

  • Не может откатывать изменения схемы (обычно, это редко, не хорошо протестированный и твердо так или иначе настолько имеющее необходимость, чтобы сделать это, вручную не грандиозное предприятие IMO).

  • Используя последовательный номер версии боль, когда Вы разрабатываете в нескольких ответвлениях - так как Вы используете SVN, это не столь вероятно быть проблемой, как будто Вы использовали мерзавца все же.:-)

Сценарий сценария, который я использую, здесь: database_update и существует маленький файл данных в качестве примера.

3
ответ дан 2 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: