UMGUM.COM 

Bacula + PostgreSQL encoding ( Исправление неверной кодировки БД "Bacula" в СУБД "PostgreSQL". )

10 апреля 2018  (обновлено 20 января 2019)

OS: "Linux Debian Wheezy/Jessie/Stretch".
Application: "Bacula Dir/SD 5.2/7.4" и "PostgreSQL".

Если "база данных" для "Bacula" в СУБД "PostgreSQL" была создана не в требуемой кодировке "SQL_ASCII" (наследие системы именований "томов" для ленточных накопителей), то работать это в больше части функционала будет, но журнал событий наполнят предупреждения о некорректно настроенной БД:

... Warning: Encoding error for database "bacula". Wanted SQL_ASCII, got UTF8

В таком случае лучше переконвертировать БД в кодировку "SQL_ASCII", как этого хочется "Bacula".


Прежде всего останавливаем использующие "базу данных" сервисы:

# /etc/init.d/bacula-director stop
# /etc/init.d/bacula-sd stop

Выгружаем SQL-дамп с указанием желаемой кодировки:

# su - postgres
postgres@bacula:~$ pg_dump -U postgres --encoding SQL_ASCII bacula -f ./bacula_ascii.sql

Создаём новую БД, уже в нужной кодировке "SQL_ASCII":

postgres@bacula:~$ echo "CREATE DATABASE bacula_ascii WITH OWNER = 'bacula' ENCODING = 'SQL_ASCII' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE = 'template0'" | psql -U postgres

Проверяем успешность создания БД:

postgres@bacula:~$ psql -l

                                   List of databases
    Name     |  Owner | Encoding  |   Collate   |    Ctype    | Access privileges  
-------------+--------+-----------+-------------+-------------+-------------------
bacula       | bacula | UTF8      | en_US.UTF-8 | en_US.UTF-8 | =Tc/bacula      +
             |        |           |             |             | bacula=CTc/bacula
bacula_ascii | bacula | SQL_ASCII | C           | C           |
....

Загружаем в новую БД данные из "дампа", заранее созданного в нужной кодировке:

postgres@bacula:~$ psql -U postgres -f ./bacula_ascii.sql -d bacula_ascii

Переименовываем старую и новую БД, сохраняя предыдущую на всякий случай, и подставляя вместо неё новую:

postgres@bacula:~$ echo "ALTER DATABASE bacula RENAME TO bacula_utf8" | psql -U postgres
postgres@bacula:~$ echo "ALTER DATABASE bacula_ascii RENAME TO bacula" | psql -U postgres

Явно выдаём пользователю "bacula" полные права на работу с новой БД:

postgres@bacula:~$ echo "GRANT ALL PRIVILEGES ON DATABASE bacula TO bacula" | psql -U postgres

Проверяем результат операций:

postgres@bacula:~$ psql -l

                                  List of databases
   Name     |  Owner   | Encoding  |   Collate   |    Ctype    | Access privileges  
------------+----------+-----------+-------------+-------------+-------------------
bacula      | bacula   | SQL_ASCII | C           | C           | =Tc/bacula      +
            |          |           |             |             | bacula=CTc/bacula
bacula_utf8 | bacula   | UTF8      | en_US.UTF-8 | en_US.UTF-8 | =Tc/bacula      +
            |          |           |             |             | bacula=CTc/bacula
....

Запускаем сервисы, использующие БД:

# /etc/init.d/bacula-sd start
# /etc/init.d/bacula-director start


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )