Instalação de um banco de dados PostgreSQL
Como alternativa ao MariaDB/MySQL, você pode optar por usar o PostgreSQL como backend de banco de dados para o Zabbix. Assim como o MariaDB, o PostgreSQL pode ser instalado usando os pacotes fornecidos pelo fornecedor do sistema operacional ou os repositórios oficiais do PostgreSQL.
Se você já instalou o MariaDB na seção anterior, pode pular esta seção.
Até o momento, o PostgreSQL 13-18 é suportado pelo Zabbix. Verifique a documentação do Zabbix para obter uma lista atualizada das versões suportadas para sua versão do Zabbix. Normalmente, é uma boa ideia usar a versão mais recente que é suportada pelo Zabbix.
Dica "Extensão do TimescaleDB"
Zabbix also supports the extension TimescaleDB but due to its advanced nature,
we won't cover it in this chapter. Refer to [_Partitioning PostgreSQL with TimescaleDB_](../ch13-advanced-security/partitioning-postgresql-database.md)
for detailed instructions on that topic.
Do note that if you want to use TimescaleDB RPM packages provided
by Timescale, you will need to install PostgreSQL from the official
PostgreSQL repositories instead of the OS vendor-provided packages.
If you choose to install PostgreSQL from the OS vendor-provided packages,
you will need to compile and install the TimescaleDB extension from source.
Instalação do servidor e cliente PostgreSQL a partir de pacotes fornecidos pelo fornecedor do sistema operacional
Para instalar o servidor PostgreSQL padrão da distribuição, execute os seguintes comandos:
Instalar o servidor Postgres
Red Hat
SUSE
Ubuntu
Esse comando fará o download e instalará os pacotes do servidor e do cliente, permitindo que você defina, configure e interaja com o banco de dados PostgreSQL.
A inicialização do banco de dados é necessária no Red Hat
Due to policies for Red Hat family distributions, the PostgreSQL service does not initialize an empty database required for PostgreSQL to function. So for Red Hat we need to initialize an empty database before continuing:
Red Hat
On SUSE and Ubuntu the OS provided SystemD service will automatically initialize an empty database on first startup.
Quando a instalação estiver concluída, prossiga para a seção Starting the PostgreSQL Database.
Instalando o PostgreSQL a partir dos repositórios oficiais do PostgreSQL
Se você preferir instalar o PostgreSQL a partir dos repositórios oficiais do PostgreSQL em vez dos pacotes fornecidos pelo fornecedor do sistema operacional, a primeira etapa é adicionar o repositório do PostgreSQL ao seu sistema.
Adição do repositório PostgreSQL
Configure o repositório PostgreSQL com os seguintes comandos:
Consulte https://www.postgresql.org/download/linux/ para obter mais informações.
Adicionar repositório PostgreSQL
Red Hat
# Install the repository RPM:
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Disable the built-in PostgreSQL module:
dnf -qy module disable postgresql
SUSE
# Import the repository signing key:
rpm --import https://zypp.postgresql.org/keys/PGDG-RPM-GPG-KEY-SLES16
# Install the repository RPM:
zypper install https://download.postgresql.org/pub/repos/zypp/reporpms/SLES-16-x86_64/pgdg-suse-repo-latest.noarch.rpm
# Update the package lists:
zypper refresh
openSUSE Leap
Since the official PostgreSQL packages are specifically built for use on SUSE Linux Enterprise Server (SLES), you will get an error trying to install the repository on openSUSE Leap. We can however safely ignore this problem by choosing to "break the package by ignoring some of its dependencies" as long as you match the SLES version with your openSUSE version:
Problem: 1: nothing provides 'sles-release' needed by the to be installed pgdg-suse-repo-42.0-48PGDG.noarch
Solution 1: do not install pgdg-suse-repo-42.0-48PGDG.noarch
Solution 2: break pgdg-suse-repo-42.0-48PGDG.noarch by ignoring some of its dependencies
Choose from above solutions by number or cancel [1/2/c/d/?] (c): 2
Suse Linux Enterprise Server
On SUSE Linux Enterprise Server (SLES), ensure you are subscribed to the "SUSE Package Hub extension" repository to access necessary dependency packages required for the Official PostgreSQL installation. On SLES 15 you will also need the "Desktop Applications Module":
Ubuntu
# Import the repository signing key:
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
# Create the repository configuration file:
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Update the package lists:
sudo apt update
Instalando o servidor e o cliente PostgreSQL
Com os repositórios do PostgreSQL configurados, agora você está pronto para instalar o servidor PostgreSQL e os pacotes do cliente. Isso fornecerá os componentes necessários para executar e gerenciar seu banco de dados.
Instale o PostgreSQL a partir dos repositórios oficiais
Red Hat
SUSE
Ubuntu
Esse comando fará o download e instalará os pacotes do servidor e do cliente, permitindo que você defina, configure e interaja com o banco de dados PostgreSQL.
Em seguida, antes de iniciarmos o servidor PostgreSQL, precisamos inicializar um novo banco de dados vazio:
Quando a instalação estiver concluída, prossiga para a seção Iniciando o banco de dados PostgreSQL.
Iniciando o banco de dados PostgreSQL
Agora que o PostgreSQL está instalado, precisamos habilitar o serviço para iniciar automaticamente na inicialização, bem como iniciá-lo imediatamente. Use o seguinte comando para fazer isso:
Habilitar e iniciar o serviço PostgreSQL
for OS-provided packages
for official PostgreSQL packages:
Esse comando habilitará e iniciará o serviço do PostgreSQL. Com o serviço instalado e em execução, você pode verificar se a instalação foi bem-sucedida verificando a versão do PostgreSQL usando o seguinte comando:
A saída esperada deve ser similar a esta:
Para garantir que o serviço PostgreSQL esteja sendo executado corretamente, você pode verificar seu status com o seguinte comando:
Obter status do PostgreSQL
for OS-provided packages
for official PostgreSQL packages:
Você deverá ver um resultado semelhante a este, indicando que o serviço PostgreSQL está ativo e em execução:
Exemplo de status do serviço PostgreSQL
localhost:~ $ sudo systemctl status postgresql-17
● postgresql-17.service - PostgreSQL 17 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-17.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-12-29 17:24:07 CET; 6s ago
Invocation: 43ba47dfee5b415db223e3452c3cfacc
Docs: https://www.postgresql.org/docs/17/static/
Process: 11131 ExecStartPre=/usr/pgsql-17/bin/postgresql-17-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 11137 (postgres)
Tasks: 7 (limit: 4672)
CPU: 471ms
CGroup: /system.slice/postgresql-17.service
├─11137 /usr/pgsql-17/bin/postgres -D /var/lib/pgsql/17/data/
├─11138 "postgres: logger "
├─11139 "postgres: checkpointer "
├─11140 "postgres: background writer "
├─11142 "postgres: walwriter "
├─11143 "postgres: autovacuum launcher "
└─11144 "postgres: logical replication launcher "
Dec 29 17:24:07 localhost.localdomain systemd[1]: Starting PostgreSQL 17 database server...
Dec 29 17:24:07 localhost.localdomain postgres[11137]: 2025-12-29 17:24:07.650 CET [11137] LOG: redirecting log output to logging co>
Dec 29 17:24:07 localhost.localdomain postgres[11137]: 2025-12-29 17:24:07.650 CET [11137] HINT: Future log output will appear in di>
Dec 29 17:24:07 localhost.localdomain systemd[1]: Started PostgreSQL 17 database server.
Isso confirma que seu servidor PostgreSQL está funcionando e pronto para outras configurações.
Protegendo o banco de dados PostgreSQL
O PostgreSQL lida com as permissões de acesso de forma diferente do MySQL e do
MariaDB. O PostgreSQL se baseia em um arquivo chamado pg_hba.conf para
gerenciar quem pode acessar o banco de dados, de onde e qual método de
criptografia é permitido para autenticação.
Sobre o pg_hba.conf
Client authentication in PostgreSQL is configured through the pg_hba.conf
file, where "HBA" stands for Host-Based Authentication. This file specifies
which users can access the database, from which hosts, and how they are authenticated.
For further details, you can refer to the official PostgreSQL documentation."
https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
Adicione as seguintes linhas, a ordem aqui é importante.
Editar o arquivo pg_hba
Red Hat / SUSE
# for OS-provided packages
vi /var/lib/pgsql/data/pg_hba.conf
# for official packages
vi /var/lib/pgsql/17/data/pg_hba.conf
Ubuntu
Localização do arquivo pg_hba
If you don't find the pg_hba.conf and postgres.conf files in the above
mentioned location you can ask PostgreSQL itself for the location using
this command (provided that PostgreSQL is currently running):
O arquivo pg_hba resultante deve ser semelhante a :
Exemplo de Pg_hba
# "local" is for Unix domain socket connections only
local zabbix zabbix-srv scram-sha-256
local all all peer
# IPv4 local connections
host zabbix zabbix-srv <ip from zabbix server/24> scram-sha-256
host zabbix zabbix-web <ip from zabbix frontend/24> scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host zabbix zabbix-srv ::1/128 scram-sha-256
host zabbix zabbix-web ::1/128 scram-sha-256
host all all ::1/128 ident
Certifique-se de manter a ordem das entradas
The order of the entries in the pg_hba.conf file is crucial, as PostgreSQL
processes these rules sequentially. Ensure that the specific rules for the
zabbix-srv and zabbix-web users are placed before any broader rules like
the default all user rules that could potentially override them.
Depois de alterarmos o arquivo pg_hba.conf, não se esqueça de reiniciar o
Postgres, caso contrário as configurações não serão aplicadas. Mas antes de
reiniciarmos, vamos também editar o arquivo postgresql.conf e permitir que
nosso banco de dados escute em nossa interface de rede as conexões de entrada do
servidor Zabbix. Por padrão, o PostgreSQL só permite conexões de um soquete
unix.
Editar arquivo postgresql.conf
Red Hat / SUSE
# for OS-provided packages
vi /var/lib/pgsql/data/postgresql.conf
# for official packages
vi /var/lib/pgsql/17/data/postgresql.conf
Ubuntu
Localize a seguinte linha:
e substituí-la por:
Nota
This will enable PostgreSQL to accept connections from any network interface, not just the local machine. In production it's probably a good idea to limit who can connect to the DB.
Depois de fazer essa alteração, reinicie o serviço PostgreSQL para aplicar as novas configurações:
!!! info "restart the DB server" (reinicie o servidor de banco de dados)
for OS-provided packages
``` bash
sudo systemctl restart postgresql
```
for official packages
```bash
sudo systemctl restart postgresql-17
```
Dica
If the service fails to restart, review the pg_hba.conf file for any syntax errors,
as incorrect entries here may prevent PostgreSQL from starting.
Criação da instância do banco de dados Zabbix
Com os pacotes necessários instalados, agora você está pronto para criar o banco de dados e os usuários do Zabbix para o servidor e o frontend.
Os pacotes do PostgreSQL criam automaticamente um usuário Linux padrão
postgres durante a instalação, que tem privilégios administrativos na
instância do PostgreSQL. Para administrar o banco de dados, você precisará
executar comandos como o usuário postgres.
Primeiro, crie o usuário do banco de dados do servidor Zabbix (também chamado de "função" no PostgreSQL):
criar usuários do servidor
Em seguida, crie o usuário front-end do Zabbix, que será usado para se conectar ao banco de dados:
Criar usuário de front-end
Agora, com os usuários criados, a próxima etapa é criar o banco de dados do
Zabbix. Execute o seguinte comando para criar o banco de dados zabbix com o
proprietário definido como zabbix-srv e a codificação de caracteres definida
como Unicode, conforme exigido pelo Zabbix:
O que é esse 'template0'?
In PostgreSQL, template0 is a default database template that serves as a pristine
copy of the database system. When creating a new database using template0,
it ensures that the new database starts with a clean slate, without any
pre-existing objects or configurations that might be present in other templates.
This is particularly useful when you want to create a database with specific
settings or extensions without inheriting any unwanted elements from other templates.
Depois que o banco de dados for criado, verifique a conexão e certifique-se de
que a sessão correta do usuário esteja ativa. Para fazer isso, faça login no
banco de dados zabbix usando o usuário zabbix-srv:
Depois de fazer login, execute a seguinte consulta SQL para confirmar que tanto
o session_user quanto o current_user estão definidos como zabbix-srv:
Se a saída corresponder, você se conectou com sucesso ao banco de dados com o usuário correto.
O PostgreSQL de fato difere significativamente do MySQL ou do MariaDB em vários aspectos, e um dos principais recursos que o diferencia é o uso de esquemas. Ao contrário do MySQL, em que os bancos de dados são mais independentes, o sistema de esquema do PostgreSQL fornece um ambiente estruturado e multiusuário em um único banco de dados.
Os esquemas funcionam como contêineres lógicos dentro de um banco de dados, permitindo que vários usuários ou aplicativos acessem e gerenciem dados de forma independente, sem conflitos. Esse recurso é especialmente valioso em ambientes em que vários usuários ou aplicativos precisam interagir com o mesmo banco de dados simultaneamente. Cada usuário ou aplicativo pode ter seu próprio esquema, evitando interferências acidentais nos dados dos outros.
Nota
PostgreSQL comes with a default schema, typically called public, but in
general, it's a best practice to create custom schemas to better organize and separate
database objects, especially in complex or multi-user environments.
For more in-depth information, I recommend checking out the detailed guide at this URI, https://hevodata.com/learn/postgresql-schema/#schema which explains the benefits and use cases for schemas in PostgreSQL.
Para finalizar a configuração inicial do banco de dados do Zabbix, precisamos
configurar as permissões do esquema para os usuários zabbix-srv e
zabbix-web.
Primeiro, criamos um esquema personalizado chamado zabbix_server e atribuímos
a propriedade ao usuário zabbix-srv:
!!! info "create the db schema" (criar o esquema do banco de dados)
```psql
zabbix=> CREATE SCHEMA zabbix_server AUTHORIZATION "zabbix-srv";
```
Em seguida, definimos o caminho de pesquisa para zabbix_server schema para
que seja o padrão da sessão atual:
Dica
If you prefer not to set the search path manually each time you log in as the
zabbix-srv user, you can configure PostgreSQL to automatically use the desired
search path. Run the following SQL command to set the default search path for
the zabbix-srv role:
This command ensures that every time the zabbix-srv user connects to the
database, the search_path is automatically set to zabbix_server.
Para confirmar a configuração do esquema, você pode listar os esquemas existentes:
Verificar acesso ao esquema
Neste ponto, o usuário zabbix-srv tem acesso total ao esquema, mas o usuário
zabbix-web ainda precisa de permissões apropriadas para se conectar e
interagir com o banco de dados. Primeiro, concedemos a USAGE privilégios no
esquema para permitir que zabbix-web se conecte:
Conceder acesso ao esquema para o usuário zabbix-web
Agora, o usuário zabbix-web tem acesso adequado para interagir com o esquema,
mantendo a segurança ao limitar as permissões às operações essenciais.
Se estiver pronto, você poderá sair do banco de dados e retornar ao shell do Linux.
Neste ponto, seu banco de dados do Zabbix está pronto, mas antes que ele possa realmente ser usado pelo Zabbix, ainda precisamos preencher o banco de dados com as tabelas necessárias e os dados iniciais, mas isso será abordado na próxima seção, quando instalarmos o servidor Zabbix.
Se você pretende instalar o Zabbix Server em uma máquina diferente da que hospeda o banco de dados, será necessário abrir o firewall do host para permitir conexões de entrada com o servidor de banco de dados. Por padrão, o PostgreSQL escuta na porta 5432.
Adicionar regras de firewall
Red Hat / SUSE
Ubuntu
Preencher o banco de dados do Zabbix
Durante a instalação do software de banco de dados anteriormente, criamos os usuários, o banco de dados e o esquema necessários para o Zabbix. No entanto, o Zabbix espera que determinadas tabelas, esquemas, imagens e outros elementos estejam presentes no banco de dados. Para configurar o banco de dados corretamente, precisamos preenchê-lo com o esquema necessário.
Primeiro, precisamos instalar os scripts SQL do Zabbix que contêm os scripts de importação necessários para o banco de dados.
Instalar scripts SQL
Red Hat
SUSE
Ubuntu
Em seguida, você precisa preparar o esquema do banco de dados: descompacte os arquivos de esquema necessários executando o seguinte comando:
Descompacte o patch do DB
Red Hat / SUSE
Ubuntu
Nota
Zabbix seems to like to change the locations of the script to populate the DB every version or even in between versions. If you encounter an error take a look at the Zabbix documentation, there is a good chance that some location was changed.
Isso extrairá o esquema do banco de dados necessário para o servidor Zabbix.
Agora, executaremos o arquivo SQL para preencher o banco de dados. Abra um shell
psql:
Certifique-se de que o search_path correto esteja definido
Make sure you performed previous steps as outlined in Creating the Zabbix database instance with PostgreSQL
carefully so that you have set the correct search_path.
If you did not set the default search_path for the zabbix-srv user,
ensure you set it manually in the current session before proceeding:
Faça o upload do esquema do banco de dados para o banco de dados usando os seguintes comandos:
carregar o esquema do banco de dados para o banco de dados zabbix
Aviso
Depending on your hardware or VM performance, this process can take anywhere from a few seconds to several minutes. Please be patient and avoid cancelling the operation.
Monitore o progresso à medida que o script é executado. Você verá uma saída semelhante a:
Exemplo de saída
Once the script completes and you return to the zabbix=> prompt, the database
should be successfully populated with all the required tables, schemas, images,
and other elements needed for Zabbix.
Entretanto, zabbix-web ainda não pode executar nenhuma operação nas tabelas ou
sequências. Para permitir a interação básica dos dados sem conceder muitos
privilégios, conceda as seguintes permissões:
- Para tabelas: SELECT, INSERT, UPDATE e DELETE.
- Para sequências: SELECT e UPDATE.
Conceder direitos sobre o esquema ao usuário zabbix-web
Verifique se os direitos estão corretos no esquema:
Exemplo de direitos de esquema
zabbix=> \dn+
List of schemas
Name | Owner | Access privileges | Description
---------------+-------------------+----------------------------------------+------------------------
public | pg_database_owner | pg_database_owner=UC/pg_database_owner+| standard public schema
| | =U/pg_database_owner |
zabbix_server | zabbix-srv | "zabbix-srv"=UC/"zabbix-srv" +|
| | "zabbix-web"=U/"zabbix-srv" |
Nota
If you encounter the following error during the SQL import:
vbnet psql:/usr/share/zabbix/sql-scripts/postgresql/server.sql:7: ERROR: no
schema has been selected to create in It indicates that the search_path setting
might not have been correctly applied. This setting is crucial because it specifies
the schema where the tables and other objects should be created. By correctly
setting the search path, you ensure that the SQL script will create tables
and other objects in the intended schema.
Para garantir que as tabelas do Zabbix foram criadas com êxito e têm as
permissões corretas, você pode verificar a lista de tabelas e sua propriedade
usando o comando psql:
- Listar as tabelas: Use o seguinte comando para listar todas as tabelas no
esquema
zabbix_server:
Você verá uma lista de tabelas com seu esquema, nome, tipo e proprietário. Por exemplo:
Tabela de listas com relações
zabbix=> \dt
List of relations
Schema | Name | Type | Owner
---------------+----------------------------+-------+------------
zabbix_server | acknowledges | table | zabbix-srv
zabbix_server | actions | table | zabbix-srv
zabbix_server | alerts | table | zabbix-srv
zabbix_server | auditlog | table | zabbix-srv
zabbix_server | autoreg_host | table | zabbix-srv
zabbix_server | changelog | table | zabbix-srv
zabbix_server | conditions | table | zabbix-srv
...
...
...
zabbix_server | valuemap | table | zabbix-srv
zabbix_server | valuemap_mapping | table | zabbix-srv
zabbix_server | widget | table | zabbix-srv
zabbix_server | widget_field | table | zabbix-srv
(203 rows)
- Verify Permissions: Confirm that the zabbix-srv user owns the tables and has the necessary permissions. You can check permissions for specific tables using the \dp command:
Example output
zabbix=> \dp zabbix_server.*
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
---------------+----------------------------+----------+------------------------------------+-------------------+----------
zabbix_server | acknowledges | table | "zabbix-srv"=arwdDxtm/"zabbix-srv"+| |
| | | "zabbix-web"=arwd/"zabbix-srv" | |
zabbix_server | actions | table | "zabbix-srv"=arwdDxtm/"zabbix-srv"+| |
| | | "zabbix-web"=arwd/"zabbix-srv" | |
zabbix_server | alerts | table | "zabbix-srv"=arwdDxtm/"zabbix-srv"+| |
| | | "zabbix-web"=arwd/"zabbix-srv" | |
zabbix_server | auditlog | table | "zabbix-srv"=arwdDxtm/"zabbix-srv"+| |
This will display the access privileges for all tables in the zabbix_server
schema. Ensure that zabbix-srv has the required privileges.
If everything looks correct, your tables are properly created and the
zabbix-srv user has the appropriate ownership and permissions. If you need to
adjust any permissions, you can do so using the GRANT commands as needed.
This concludes our installation of the PostgreSQL database.
Conclusão
With the installation and configuration of PostgreSQL as the database backend for Zabbix complete, you now have a powerful and efficient database system ready for your monitoring needs. We've covered the installation of PostgreSQL from both vendor-provided packages and official repositories, securing the database, creating the necessary Zabbix database and users, and populating the database with the required schema and initial data.
Seu ambiente Zabbix agora está pronto para os próximos estágios de instalação e configuração.
Perguntas
- What version of PostgreSQL should I install for compatibility and stability?
- Qual é a porta usada pelo meu banco de dados?
- Quais usuários do banco de dados eu criei e por quê?