PostgreSQL-15.2

Introdução ao PostgreSQL

"PostgreSQL" é um avançado sistema de gerenciamento de bases de dados objeto relacional ("SAGBDOR"), derivado do sistema de gerenciamento de bases de dados "Berkeley Postgres".

Esse pacote é conhecido por construir e funcionar adequadamente usando uma plataforma LFS 11.3.

Informação do Pacote

  • Transferência (HTTP): https://ftp.postgresql.org/pub/source/v15.2/postgresql-15.2.tar.bz2

  • Transferência (FTP):

  • Soma de verificação MD5 da transferência: 968418dbdd700caaccfeabcee7516496

  • Tamanho da transferência: 21,6 MB

  • Espaço em disco estimado exigido: 209 MB (adicionar 42 MB para os testes)

  • Tempo de construção estimado: 0,6 UPC (com paralelismo=4, adicionar 0,1 UPC para os testes)

Dependências do "PostgreSQL"

Opcionais

ICU-72.1, libxml2-2.10.3, libxslt-1.1.37, OpenLDAP-2.6.4, Linux-PAM-1.5.2, MIT Kerberos V5-1.20.1 e Bonjour

Opcionais (Para Regenerar a Documentação)

fop-2.8, docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2 e SGMLSpm-1.1

Observações de Usuário(a): https://wiki.linuxfromscratch.org/blfs/wiki/postgresql

Instalação do PostgreSQL

Para maior segurança, é melhor ter um grupo e usuário(a) dedicado para executar o servidor "PostgreSQL". Primeiro, emita como o(a) usuário(a) "root":

groupadd -g 41 postgres &&
useradd -c "Servidor PostgreSQL" -g postgres -d /srv/pgsql/data \
        -u 41 postgres
[Nota]

Nota

Existem vários itens de configuração que adicionam funcionalidade adicional com pacotes opcionais ao "PostgreSQL". Use "./configure --help" para ver uma lista.

Instale o "PostgreSQL" com os seguintes comandos:

sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&

./configure --prefix=/usr         \
            --enable-thread-safety \
            --docdir=/usr/share/doc/postgresql-15.2 &&
make

Existem vários aplicativos no diretório "contrib/". Se você for executar essa instalação como um servidor e desejar construir alguns deles, [então] digite "make -C contrib" ou "make -C contrib/<NOME-SUB-DIRETÓRIO>" para cada subdiretório.

Os testes precisam ser executados como um(a) usuário(a) sem privilégios porque precisam iniciar um servidor temporário e isso é evitado como o(a) usuário(a) "root". Pela mesma razão, você precisa parar todos os servidores "PostgreSQL", se algum estiver em execução. Se uma versão anterior do "PostgreSQL" estiver instalada, [então] possivelmente seja necessário usar "--disable-rpath" com o "configure" para evitar falhas, mas instalar os binários criados usando essa chave não é recomendado. Para testar os resultados, emita: "make check".

[Nota]

Nota

Se você estiver instalando o "PostgreSQL" para atualizar uma instalação existente, [então] existem etapas importantes que você precisa seguir. Se a versão principal da nova construção for superior à versão anterior, [então] existe uma chance de que o formato do arquivo de dados tenha mudado. O novo logiciário não consegue atuar nos arquivos de dados existentes. Nesse caso, o servidor não iniciará porque os aplicativos antigos foram sobrescritos, de forma que os dados estão indisponíveis até que o formato do arquivo deles tenha sido convertido.

Antes de atualizar uma instalação existente do "PostgreSQL", verifique a documentação para quaisquer considerações que você precisa ter em mente durante a atualização. Observe que as novas versões principais podem usar um formato binário diferente nos objetos de dados, causando potenciais incompatibilidades. Para mais informações, verifique a documentação do(a) desenvolvedor(a) relativa a atualização do "PostgreSQL" aqui: https://www.postgresql.org/docs/current/upgrading.html.

Neste ponto, você possivelmente tenha os binários antigo e novo instalados em seu sistema de arquivos. Esses binários podem ser usados para realizar uma atualização dos teus arquivos de base de dados existentes. Para as instruções a seguir, presume-se que

  • Os arquivos de dados atuais estão armazenados em "/srv/pgsql/data"

  • Os arquivos de dados atualizados serão armazenados em "/srv/pgsql/newdata"

  • Existe espaço em disco suficiente para armazenar os arquivos de dados atuais duas vezes. A atualização não é uma atualização em linha, mas copiará os dados para novos arquivos de base de dados.

Primeiro, faça uma instalação temporária que torna o acesso aos novos binários muito mais fácil:

make DESTDIR=$(pwd)/DESTDIR install

Em seguida, crie um diretório que seja escrevível pelo(a) usuário(a) "postgres", como o(a) usuário(a) "root":

install -d -o postgres $(pwd)/DESTDIR/tmp

Agora, pare a instância existente do "PostgreSQL" e inicie o processo de atualização como o(a) usuário(a) "root":

pushd $(pwd)/DESTDIR/tmp
systemctl stop postgresql
su postgres -c "../usr/bin/initdb -D /srv/pgsql/newdata"
su postgres -c "../usr/bin/pg_upgrade \
                    -d /srv/pgsql/data   -b /usr/bin \
                    -D /srv/pgsql/newdata -B ../usr/bin"
popd

Neste ponto, os teus arquivos da base de dados estão disponíveis em dois locais no disco. Os dados antigos estão localizados em "/srv/pgsql/data" e os novos dados estão em "/srv/pgsql/newdata". Produzir uma cópia de segurança dos arquivos antigos da base de dados é sugerido antes de continuar.

Em seguida, remova os arquivos antigos de base de dados e renomeie o novo diretório de dados como o(a) usuário(a) "root":

rm -rf /srv/pgsql/data
mv /srv/pgsql/newdata /srv/pgsql/data

Agora, como o(a) usuário(a) "root":

make install     &&
make install-docs

Se você criou qualquer um dos aplicativos "contrib/", como o(a) usuário(a) "root":

make -C contrib/<NOME-SUB-DIRETÓRIO> install
[Dica]

Dica

Se você pretende usar o "PostgreSQL" somente como um cliente para conectar-se a um servidor em outra máquina, [então] a tua instalação está completa e você não deveria executar os comandos restantes.

Se você atualizou uma base de dados existente, [então] ignore o restante dos comandos porque a tua base de dados está pronta para uso. Se essa for a primeira vez que você instala o "PostgreSQL", [então] continue com a inicialização.

Inicialize um agrupamento de bases de dados com os seguintes comandos emitidos pelo(a) usuário(a) "root":

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&
chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Agora, inicialize a base de dados como o(a) usuário(a) "root":

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

Explicações do Comando

sed -i ...: Esse "sed" muda o local do soquete do servidor de "/tmp" para "/run/postgresql".

--enable-thread-safety: Essa chave torna as bibliotecas cliente seguras em camadas, permitindo que camadas simultâneas em aplicativos "libpq" e "ECPG" controlem com segurança os manuseadores privados de conexão deles.

--with-openssl: constrói o pacote com suporte para conexões encriptadas "OpenSSL".

--with-perl: constrói a linguagem "PL"/"Perl" do lado do servidor.

--with-python: constrói a linguagem "PL"/"Python" do lado do servidor. "Python3" é usado por padrão; "Python2" não mais é suportado.

--with-tcl: constrói a linguagem "PL"/"Tcl" do lado do servidor.

Configurando o PostgreSQL

Arquivos de Configuração

$PGDATA/pg_ident.con, $PGDATA/pg_hba.conf e $PGDATA/postgresql.conf

A variável de ambiente "PGDATA" é usada para distinguir agrupamentos de bases de dados uns dos outros, configurando-a com o valor do diretório que contém o agrupamento desejado. Os três arquivos de configuração existem em cada diretório "PGDATA/". Detalhes relativos ao formato dos arquivos e as opções que podem ser configuradas em cada um podem ser encontrados em /usr/share/doc/postgresql-15.2/html/index.html.

Unidade do systemd

Instale a unidade "postgresql.service" inclusa no pacote "" "blfs-systemd-units-20220720":

make install-postgresql

Iniciando o Servidor PostgreSQL e Criando uma Base de Dados de Exemplo

O servidor de base de dados pode ser iniciado manualmente com o seguinte comando (como o(a) usuário(a) "root"):

su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                 /srv/pgsql/data/logfile 2>&1 &'
[Nota]

Nota

Se você estiver automatizando esta parte, [então] você deveria esperar o servidor iniciar antes de continuar, adicionando, por exemplo, "sleep 2" depois do comando acima.

As instruções abaixo mostram como criar uma base de dados, adicionar uma tabela nela, inserir algumas linhas na tabela e selecioná-las, para verificar se a instalação está funcionando corretamente. Ainda como usuário(a) "root", emita:

su - postgres -c '/usr/bin/createdb test' &&
echo "create table t1 ( name varchar(20), state_province varchar(20) );" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Billy', 'NewYork');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Evanidus', 'Quebec');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Jesse', 'Ontario');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

Quando terminar o teste, você pode desligar o servidor, emitindo como "root":

su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

Conteúdo

Aplicativos Instalados: clusterdb, createdb, createuser, dropdb, dropuser, ecpg, initdb, pg_amcheck, pg_archivecleanup, pg_basebackup, pg_checksums, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivewal, pg_recvlogical, pg_resetwal, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_verifybackup, pg_waldump, pgbench, postgres, postmaster (descontinuado), psql, reindexdb, vacuumdb, opcionalmente, se o suporte a "Tcl" tiver sido construído, pltcl_delmod, pltcl_listmod, pltcl_loadmod e, opcionalmente, (em "contrib/") oid2name, pg_standby, vacuumlo e muitos outros
Bibliotecas Instaladas: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgcommon_shlib.a, libpgfeutils.a, libpgport.a, libpgport_shlib.a, libpgtypes.{so,a}, libpq.{so,a}, vários módulos de conjuntos de caracteres e opcionalmente módulos de linguagem de programação em "/usr/lib/postgresql"
Diretórios Instalados: /usr/include/{libpq,postgresql}, /usr/lib/postgresql, /usr/share/{doc/postgresql-15.2,postgresql} e /srv/pgsql

Descrições Curtas

clusterdb

é um utilitário para reagrupar tabelas em uma base de dados "PostgreSQL"

createdb

cria uma nova base de dados "PostgreSQL"

createuser

define uma nova conta de usuário(a) "PostgreSQL"

dropdb

remove uma base de dados "PostgreSQL"

dropuser

remove uma conta de usuário(a) "PostgreSQL"

ecpg

é o pré processador incorporado "SQL"

initdb

cria um novo agrupamento de bases de dados

oid2name

resolve "OIDs" ("Object IDs") e nós de arquivo em um diretório de dados do "PostgreSQL"

pg_amcheck

verifica se existe corrupção em uma ou mais bases de dados "PostgreSQL"

pg_archivecleanup

limpa arquivos de arquivamento "write-ahead log" ("WAL") do "PostgreSQL"

pg_basebackup

faz cópias básicas de segurança de um agrupamento do PostgreSQL em execução

pg_checksums

habilita, desabilita ou verifica somas de verificação de dados em um agrupamento de bases de dados do "PostgreSQL"

pg_config

recupera informações de versão do "PostgreSQL"

pg_controldata

retorna informações inicializadas durante o "initdb", como a versão do catálogo e a localidade do servidor

pg_ctl

controla a parada e inicialização do servidor de base de dados

pg_dump

despeja dados e metadados da base de dados em conjuntos de comandos sequenciais que são usados para recriar a base de dados

pg_dumpall

chama recursivamente "pg_dump" para cada base de dados em um agrupamento

pg_isready

verifica a situação da conexão de um servidor "PostgreSQL"

pg_receivewal

é usado para transmitir "write-ahead logs" a partir de um servidor "PostgreSQL"

pg_recvlogical

controla fluxos de decodificação lógica do "PostgreSQL"

pg_resetwal

reconfigura o "write-ahead log" e outras informações de controle de um agrupamento de bases de dados "PostgreSQL"

pg_restore

cria bases de dados a partir de arquivos de despejo criados pelo "pg_dump"

pg_rewind

sincroniza um diretório de dados do "PostgreSQL" com outro diretório de dados que foi bifurcado a partir do primeiro

pg_standby

suporta a criação de um servidor de espera quente do "PostgreSQL"

pg_test_fsync

determina o método "wal_sync" mais rápido para o "PostgreSQL"

pg_test_timing

mede a sobrecarga de tempo

pg_upgrade

atualiza uma instância do servidor "PostgreSQL"

pg_verifybackup

verifica a integridade de uma cópia básica de segurança de um agrupamento do "PostgreSQL"

pg_waldump

exibe uma renderização legível por humanos(as) do "write-ahead log" de um agrupamento de bases de dados do "PostgreSQL"

pgbench

executa um teste de avaliação comparativa no "PostgreSQL"

pltcl_delmod

é um conjunto de comandos sequenciais de suporte usado para deletar um módulo originário de uma tabela "PL"/"Tcl". O comando exige que o pacote "Pgtcl" esteja instalado

pltcl_listmod

é um conjunto de comandos sequenciais de suporte usado para listar os módulos em uma tabela "PL"/"Tcl". O comando exige que o pacote "Pgtcl" esteja instalado

pltcl_loadmod

é um conjunto de comandos sequenciais de suporte usado para carregar um módulo em uma tabela "PL"/"Tcl". O comando exige que o pacote "Pgtcl" esteja instalado

postgres

é o servidor de base de dados "PostgreSQL"

postmaster

(descontinuado, um link simbólico para postgres) é um processo multiusuário(a) de segundo plano de base de dados

psql

é um "shell" de base de dados baseado em console

reindexdb

é um utilitário para reconstruir índices em uma base de dados

vacuumdb

compacta bases de dados e gera estatísticas para o analisador de consultas

vacuumlo

remove objetos grandes órfãos a partir de uma base de dados do "PostgreSQL"

libecpg.{so,a}

contém funções para suportar "SQL" incorporado em aplicativos "C"

libecpg_compat.{so,a}

é a biblioteca de compatibilidade "ecpg"

libgport.a

é o subsistema específico da porta da estrutura de retaguarda do "Postgres"

libpgtypes.{so,a}

contém funções para lidar com tipos de dados "Postgres"

libpq.{so,a}

é a "API" do(a) programador(a) "C" para "Postgres"