4 \section*{Installing and Configuring PostgreSQL}
5 \label{_ChapterStart10}
6 \index[general]{PostgreSQL!Installing and Configuring }
7 \index[general]{Installing and Configuring PostgreSQL }
8 \addcontentsline{toc}{section}{Installing and Configuring PostgreSQL}
10 \subsection*{Installing and Configuring PostgreSQL -- Phase I}
11 \index[general]{Installing and Configuring PostgreSQL -- Phase I }
12 \index[general]{Phase I!Installing and Configuring PostgreSQL -- }
13 \addcontentsline{toc}{subsection}{Installing and Configuring PostgreSQL --
16 If you use the {\bf ./configure \verb:--:with-postgresql=PostgreSQL-Directory}
17 statement for configuring {\bf Bacula}, you will need PostgreSQL version 7.3
18 or later installed. NOTE! PostgreSQL versions earlier than 7.3 do not work
19 with Bacula. If PostgreSQL is installed in the standard system location, you
20 need only enter {\bf \verb:--:with-postgresql} since the configure program will
21 search all the standard locations. If you install PostgreSQL in your home
22 directory or some other non-standard directory, you will need to provide the
23 full path with the {\bf \verb:--:with-postgresql} option.
25 Installing and configuring PostgreSQL is not difficult but can be confusing
26 the first time. If you prefer, you may want to use a package provided by your
27 chosen operating system. Binary packages are available on most PostgreSQL
30 If you prefer to install from source, we recommend following the instructions
32 \elink{PostgreSQL documentation}{http://www.postgresql.org/docs/}.
34 If you are using FreeBSD,
35 \elink{this FreeBSD Diary article}{http://www.freebsddiary.org/postgresql.php}
36 will be useful. Even if you are not using FreeBSD, the article will contain
37 useful configuration and setup information.
39 After installing PostgreSQL, you should return to completing the installation
40 of {\bf Bacula}. Later, after Bacula is installed, come back to this chapter
41 to complete the installation. Please note, the installation files used in the
42 second phase of the PostgreSQL installation are created during the Bacula
44 \label{PostgreSQL_phase2}
46 \subsection*{Installing and Configuring PostgreSQL -- Phase II}
47 \index[general]{Phase II!Installing and Configuring PostgreSQL -- }
48 \index[general]{Installing and Configuring PostgreSQL -- Phase II }
49 \addcontentsline{toc}{subsection}{Installing and Configuring PostgreSQL --
52 At this point, you should have built and installed PostgreSQL, or already have
53 a running PostgreSQL, and you should have configured, built and installed {\bf
54 Bacula}. If not, please complete these items before proceeding.
56 Please note that the {\bf ./configure} used to build {\bf Bacula} will need to
57 include {\bf \verb:--:with-postgresql=PostgreSQL-directory}, where {\bf
58 PostgreSQL-directory} is the directory name that you specified on the
59 ./configure command for configuring PostgreSQL (if you didn't specify a
60 directory or PostgreSQL is installed in a default location, you do not need to
61 specify the directory). This is needed so that Bacula can find the necessary
62 include headers and library files for interfacing to PostgreSQL.
64 {\bf Bacula} will install scripts for manipulating the database (create,
65 delete, make tables etc) into the main installation directory. These files
66 will be of the form *\_bacula\_* (e.g. create\_bacula\_database). These files
67 are also available in the \lt{}bacula-src\gt{}/src/cats directory after
68 running ./configure. If you inspect create\_bacula\_database, you will see
69 that it calls create\_postgresql\_database. The *\_bacula\_* files are
70 provided for convenience. It doesn't matter what database you have chosen;
71 create\_bacula\_database will always create your database.
73 Now you will create the Bacula PostgreSQL database and the tables that Bacula
74 uses. These instructions assume that you already have PostgreSQL running. You
75 will need to perform these steps as a user that is able to create new
76 databases. This can be the PostgreSQL user (on most systems, this is the pgsql
80 \item cd \lt{}install-directory\gt{}
82 This directory contains the Bacula catalog interface routines.
84 \item ./create\_bacula\_database
86 This script creates the PostgreSQL {\bf bacula} database.
87 If it fails, it is probably because the database is owned by a
88 user other than yourself. On many systems, the database owner is
89 {\bf pgsql} and on others such as RedHat and Fedora it is {\bf postgre}.
90 You can find out which it is by examining your /etc/passwd file.
91 To create a new user under either your name or with say the name
92 {\bf bacula}, you can do the following:
97 password pgsql (or postgre)
98 (enter a password for this account)
100 su pgsql (or postgre)
101 (enter password just created)
102 createuser kern (or perhaps bacula)
103 Shall the new user be allowed to create databases? (y/n) y
104 Shall the new user be allowed to create more new users? (y/n) (choose
109 At this point, you should be able to execute the
110 ./create\_bacula\_database command.
112 \item ./make\_bacula\_tables
114 This script creates the PostgreSQL tables used by {\bf Bacula}.
115 \item ./grant\_bacula\_privileges
117 This script creates the database user {\bf bacula} with restricted access
118 rights. You may want to modify it to suit your situation. Please note that
119 this database is not password protected.
123 Each of the three scripts (create\_bacula\_database, make\_bacula\_tables, and
124 grant\_bacula\_privileges) allows the addition of a command line argument.
125 This can be useful for specifying the user name. For example, you might need
126 to add {\bf -h hostname} to the command line to specify a remote database
129 To take a closer look at the access privileges that you have setup with the
134 PostgreSQL-directory/bin/psql --command \\dp bacula
138 Also, I had an authorization problem with the password. In the end,
139 I had to modify my {\bf pg_hba.conf} file (in /var/lib/pgsql on my machine)
150 This solved the problem for me, but it is not always a good thing
151 to do from a security standpoint. However, it allowed me to run
152 my regression scripts without having a password.
155 \subsection*{Re-initializing the Catalog Database}
156 \index[general]{Database!Re-initializing the Catalog }
157 \index[general]{Re-initializing the Catalog Database }
158 \addcontentsline{toc}{subsection}{Re-initializing the Catalog Database}
160 After you have done some initial testing with {\bf Bacula}, you will probably
161 want to re-initialize the catalog database and throw away all the test Jobs
162 that you ran. To do so, you can do the following:
166 cd <install-directory>
169 ./grant_bacula_privileges
173 Please note that all information in the database will be lost and you will be
174 starting from scratch. If you have written on any Volumes, you must write an
175 end of file mark on the volume so that Bacula can reuse it. Do so with:
179 (stop Bacula or unmount the drive)
180 mt -f /dev/nst0 rewind
185 Where you should replace {\bf /dev/nst0} with the appropriate tape drive
186 device name for your machine.
188 \subsection*{Installing PostgreSQL from RPMs}
189 \index[general]{PostgreSQL!Installing from RPMs}
190 \index[general]{Installing PostgreSQL from RPMs}
191 \addcontentsline{toc}{subsection}{Installing PostgreSQL from RPMs}
192 If you are installing PostgreSQL from RPMs, you will need to install
193 both the PostgreSQL binaries and the client libraries. The client
194 libraries are ususally found in a devel package, so you must
204 This will be the same with most other package managers too.
207 \subsection*{Converting from MySQL to PostgreSQL}
208 \index[general]{PostgreSQL!Converting from MySQL to }
209 \index[general]{Converting from MySQL to PostgreSQL }
210 \addcontentsline{toc}{subsection}{Converting from MySQL to PostgreSQL}
212 The conversion procedure presented here was worked out by Norm Dressler
213 \lt{}ndressler at dinmar dot com\gt{}
215 This process was tested using the following software versions:
218 \item Linux Mandrake 10/Kernel 2.4.22-10 SMP
219 \item Mysql Ver 12.21 Distrib 4.0.15, for mandrake-linux-gnu (i586)
220 \item PostgreSQL 7.3.4
224 WARNING: Always as a precaution, take a complete backup of your databases
225 before proceeding with this process!
228 \item Shutdown bacula (cd /etc/bacula;./bacula stop)
229 \item Run the following command to dump your Mysql database:
233 mysqldump -f -t -n >bacula-backup.dmp>
238 \item Make a backup of your /etc/bacula directory (but leave the original in
240 \item Go to your Bacula source directory and rebuild it to include PostgreSQL
241 support rather then Mysql support. Check the config.log file for your
242 original configure command and replace enable-mysql with enable-postgresql.
243 \item Recompile Bacula with a make and if everything compiles completely,
244 perform a make install.
245 \item Shutdown Mysql.
246 \item Start PostgreSQL on your system.
247 \item Create a bacula user in Postgres with the createuser command. Depending on
248 your Postgres install, you may have to SU to the user who has privileges to
250 \item Verify your pg\_hba.conf file contains sufficient permissions to allow
251 bacula to access the server. Mine has the following since it's on a secure
258 host all all 127.0.0.1 255.255.255.255 trust
260 NOTE: you should restart your postgres server if you
266 \item Change into the /etc/bacula directory and prepare the database and
267 tables with the following commands:
271 ./create_postgresql_database
273 ./make_postgresql_tables
275 ./grant_postgresql_privileges
280 \item Verify you have access to the database:
290 You should not get any errors.
291 \item Load your database from the Mysql database dump with:
295 psql -Ubacula bacula <bacula-backup.dmp>
300 \item Reseqence your tables with the following commands:
306 SELECT SETVAL('basefiles_baseid_seq', (SELECT
307 MAX(baseid) FROM basefiles));
308 SELECT SETVAL('client_clientid_seq', (SELECT
309 MAX(clientid) FROM client));
310 SELECT SETVAL('file_fileid_seq', (SELECT MAX(fileid)
312 SELECT SETVAL('filename_filenameid_seq', (SELECT
313 MAX(filenameid) FROM filename));
315 SELECT SETVAL('fileset_filesetid_seq', (SELECT
316 MAX(filesetid) FROM fileset));
318 SELECT SETVAL('job_jobid_seq', (SELECT MAX(jobid) FROM job));
319 SELECT SETVAL('jobmedia_jobmediaid_seq', (SELECT
320 MAX(jobmediaid) FROM jobmedia));
321 SELECT SETVAL('media_mediaid_seq', (SELECT MAX(mediaid) FROM media));
322 SELECT SETVAL('path_pathid_seq', (SELECT MAX(pathid) FROM path));
324 SELECT SETVAL('pool_poolid_seq', (SELECT MAX(poolid) FROM pool));
329 \item At this point, start up Bacula, verify your volume library and perform
330 a test backup to make sure everything is working properly.
333 \subsection*{Upgrading PostgreSQL}
334 \index[general]{Upgrading PostgreSQL }
335 \index[general]{Upgrading!PostgreSQL }
336 \addcontentsline{toc}{subsection}{Upgrading PostgreSQL}
337 If you upgrade PostgreSQL, you must reconfigure, rebuild, and re-install
338 Bacula otherwise you are likely to get bizarre failures. If you
339 to modify the bacula.spec file to account for the new PostgreSQL version.
340 You can do so by rebuilding from the source rpm. To do so, you may need
341 install from rpms and you upgrade PostgreSQL, you must also rebuild Bacula.
344 \subsection*{Credits}
345 \index[general]{Credits }
346 \addcontentsline{toc}{subsection}{Credits}
347 Many thanks to Dan Langille for writing the PostgreSQL driver. This will
348 surely become the most popular database that Bacula supports.