Microsoft SQL Server, PostgreSQL, Qt, Базы данных

Резервное копирование базы данных по расписанию: MS SQL Server и PostgreSQL

Резервное копирование базы данных по расписанию: MS SQL Server и PostgreSQLНе во всех СУБД есть возможность настроить Резервное копирование базы данных по расписанию штатными средствами. Например, в Microsoft SQL Server это делается без проблем, а вот в PostgreSQL такой возможности «из коробки» нет.

Но выход есть: создать файл сценария и добавить его исполнение в расписание задач в Windows.

В переменных database, host, port, userName, bin, backupDir будут храниться значения имени базы данных, сервера, порта, имени пользователя БД, путь к bin папке PostgreSQL и директории сохранения резервных копий соответственно.

Пусть значение driver = 0 будет отвечать за PostgreSQL, а 1 — за Microsoft SQL Server.

Определим текст *.bat-файла:

[pastacode lang=»cpp» manual=»QString%20batText%20%3D%20%22%40ECHO%20OFF%20%5Cn%22%0A%20%20%20%20%20%20%20%20%22SET%20dmpfile%3D%22%2Bdatabase%2B%22-FullBackup-%25DATE%3A~6%2C4%25-%25DATE%3A~3%2C2%25-%25DATE%3A~0%2C2%25%20%5Cn%22%0A%20%20%20%20%20%20%20%20%22IF%20%5C%22%25TIME%3A~0%2C1%25%5C%22%3D%3D%5C%22%20%5C%22%20(SET%20dmpfile%3D%25dmpfile%25-0%25TIME%3A~1%2C1%25)%20ELSE%20(SET%20dmpfile%3D%25dmpfile%25-%25TIME%3A~0%2C2%25)%20%5Cn%22%0A%20%20%20%20%20%20%20%20%22SET%20dmpfile%3D%25dmpfile%25-%25TIME%3A~3%2C2%25-%25TIME%3A~6%2C2%25.backup%20%5Cn%22%0A%20%20%20%20%20%20%20%20%22set%20text%20%3D%20Begin%20to%20backup…%20%5Cn%22%0A%20%20%20%20%20%20%20%20%22echo%20%25text%25%20%5Cn%22%3B%0Aif%20(driver%3D%3D0)%0A%20%20%20%20%20%20%20batText%20%2B%3D%20QString(%0A%20%20%20%20%20%20%20%20%20%20%20%22cd%20%251%5C%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%22pg_dump.exe%20—host%20%252%20—port%20%253%20—username%20%254%20—no-password%20—format%22%20%0A%09%09%20%20%20%22custom%20—blobs%20—verbose%20—file%20%5C%22%255%5C%5C%25dmpfile%25%5C%22%20%256%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.arg(bin%2C%20host%2C%20port%2C%20userName%2C%20%0A%09%09%09%09%20backupDir.replace(%22%2F%22%2C%20%22%5C%5C%22)%2C%20database)%3B%0A%20else%0A%20%20%20%20%20%20%20batText%20%2B%3D%20QString(%22SQLCMD%20-S%20%251%20-E%20-Q%20%5C%22BACKUP%20DATABASE%20%252%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%22TO%20DISK%20%3D%20’%253%2F%25dmpfile%25’%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%22WITH%20INIT%2C%20NOFORMAT%2C%20SKIP%2C%20NOUNLOAD%5C%22%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(host%2C%20database%2C%20backupDir)%3B» message=»» highlight=»» provider=»manual»/]

Имя файла резервной копии будет иметь при этом подобный вид: DatabaseName-FullBackup-2018-08-07 -11-23-38.backup, то есть имя базы данных, FullBackup + таймстемп.

Далее запишем текст в файл: Продолжить чтение «Резервное копирование базы данных по расписанию: MS SQL Server и PostgreSQL»

Microsoft SQL Server, PostgreSQL, Базы данных

Триггер на групповую вставку в таблицу в Microsoft SQL Server

Многие СУБД (например, MySQL, PostgreSQL и т.д.) умеют правильно обрабатывать события по групповой вставке данных в таблицы. Но не все. Например, триггер на групповую вставку в таблицу в Microsoft SQl Server будет отличаться. Рассмотрим примеры запросов:

[pastacode lang=»sql» manual=»insert%20into%20people%0Aselect%20name%2C%20surname%2C%20age%20from%20portfolio%3B» message=»» highlight=»» provider=»manual»/]

Или такой:

[pastacode lang=»sql» manual=»insert%20into%20people(name%2C%20surname%2C%20age)%20values%0A(‘John’%2C%20’Smith’%2C%2012)%2C%0A(‘Ann’%2C%20’Black’%2C%2029)%2C%0A(‘Samantha’%2C%20’Doeson’%2C%2038)%3B» message=»» highlight=»» provider=»manual»/]

Продолжить чтение «Триггер на групповую вставку в таблицу в Microsoft SQL Server»

Microsoft SQL Server, Qt, Базы данных

Подключение к базе данных MS SQL Server в Qt

В записи Подключение к базе данных в Qt на примере СУБД PostgreSQL я показала, как произвести подключение к базе данных. С MS SQL Server немного запутанней получается (не привыкать).

MS SQL Server может использовать 2 вида аутентификации: аутентификация windows и аутентификация  SQL Server. Ниже рассмотрим оба способа подключения. Продолжить чтение «Подключение к базе данных MS SQL Server в Qt»

PostgreSQL, Базы данных

PostgreSQL: Узнать данные о колонках таблицы

Из таблицы information_schema.columns можно узнать много чего полезного о колонках той или иной таблицы или всех таблиц сразу. А также и представлений.

Узнаем все данные о колонках таблиц и представлений схемы ‘public’ базы данных ‘my_database’:

select * from information_schema.columns
where table_catalog = 'my_database' and table_schema = 'public'

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

Чтобы получить перечень колонок и присвоенные им номера по порядку таблицы products, надо написать

select column_name, ordinal_position
from information_schema.columns
where table_catalog = 'products' and 
table_schema = 'public' and 
table_name = 'products'
PostgreSQL, Базы данных

Insert … on conflict do update — Обновление записи при вставке, если возникает нарушение ограничения

Как без предварительной проверки существования записи по первичному ключу, сразу вставлять ее, а при возникновения конфликта — просто обновить? И все за раз. Необходимо воспользоваться предложением on conflict … do …

Подробней об этом расскажет страница документации.

Я покажу пример, как при возникновении нарушения уникальности первичного ключа обновить данные. Продолжить чтение «Insert … on conflict do update — Обновление записи при вставке, если возникает нарушение ограничения»

PostgreSQL, SQL, Базы данных

Вывод даты с указанием часового и минутного смещения timezone в PostgreSQL

Для выделения часового сдвига даты формата timestamp with time zone есть функция extract(timezone_hour from date_), где date_ — дата, откуда необходимо извлечь смещение. Чтобы узнать минутное смещение есть функция extract(timezone_minute from date_). Но они обе покажут значение длиной 1, если оно меньше 10. Например, 3 вместо 03.

Напишем функцию, которая преобразует переданное значение даты в формат записи 2018-04-04T14:10:29+03:00: Продолжить чтение «Вывод даты с указанием часового и минутного смещения timezone в PostgreSQL»

C++, SQL, Базы данных, Портфолио

Информационная система для учебной части университета StudyLoad

Информационная система для учебной части университета StudyLoad выполнена в C++Builder + MS SQL Server 2008 R2. Изображение в полном размере.

Функции:

  • Ведение данных о ФГОС и Профстандартах
  • Ведение информации о кафедрах, специальностях, направлениях.
  • Составление сопоставлений ФГОС + Профессиональный стандарт.
  • Составление отчетов.

Чтобы заказать проект или получить консультацию, перейдите, пожалуйста, на страницу Контакты.

Моё портфолио

Инфо обо мне

SQL, Базы данных

Основы баз данных. Логическая модель. 3 основные нормальные формы

Нормальные формы базы данныхВ статье Основы баз данных. ER-модель (сущность-связь) я рассказала про принцип построения этой самой модели. Это — отправная точка в создании базы данных. От модели сущность-связь необходимо перейти к логической модели — к тому виду, в котором и будет представлена наша база данных (не учитывая физическую модель) в выбранной системе управления базами данных (СУБД). Продолжить чтение «Основы баз данных. Логическая модель. 3 основные нормальные формы»

SQL, Базы данных, О том о сём

Основы баз данных. ER-модель (сущность-связь)

ER model заголовок статьиПару лет назад среди прочих моих занятий были онлайн уроки по основам построения логической структуры базы данных и языку SQL. Уроками на данный момент не занимаюсь, а вот сами записи остались, так что решила я их выложить, чего добру пропадать зря? 🙂

Сегодня речь пойдет о модели «сущность-связь», или entity-relationship model. Продолжить чтение «Основы баз данных. ER-модель (сущность-связь)»

Базы данных

Триггеры в PostgreSQL

Захотелось посвятить одну запись триггерам. Люблю я их за то, что делают некоторую работу без моего участия, это так ценно 🙂

Как создать триггер?

Сначала напишем триггерную функцию, которая и будет выполнять некоторые действия при модификации той или иной таблицы. Продолжить чтение «Триггеры в PostgreSQL»