Baixe o app para aproveitar ainda mais
Prévia do material em texto
Administração do SGBD PostgreSQL Unidade 2 Arquitetura e funcionamento do PostgreSQL Diretor Executivo DAVID LIRA STEPHEN BARROS Gerente Editorial CRISTIANE SILVEIRA CESAR DE OLIVEIRA Projeto Gráfico TIAGO DA ROCHA Autoria CAMILA FREITAS SARMENTO AUTORIA Camila Freitas Sarmento Sou formada em Telemática com mestrado em Ciência da Computação e, atualmente, doutoranda na área de Engenharia de Software, com uma experiência técnico-profissional na área de Soluções Digitais (Redes e Programação Back-End) de mais de sete anos. Atualmente sou Analista de Informática – Programadora Web Back-End no Instituto Senai de Tecnologia em Automação Industrial (IST-Senai). Fui professora substituta na Universidade Estadual da Paraíba (UEPB) e atuei como professora substituta e, posteriormente, como tutora no Instituto Federal de Educação, Ciência e Tecnologia da Paraíba (IFPB). Sou apaixonada pelo que faço e adoro transmitir minha experiência àqueles que estão iniciando em suas profissões. Por isso fui convidada pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! ICONOGRÁFICOS Olá. Esses ícones irão aparecer em sua trilha de aprendizagem toda vez que: OBJETIVO: para o início do desenvolvimento de uma nova compe- tência; DEFINIÇÃO: houver necessidade de se apresentar um novo conceito; NOTA: quando forem necessários obser- vações ou comple- mentações para o seu conhecimento; IMPORTANTE: as observações escritas tiveram que ser priorizadas para você; EXPLICANDO MELHOR: algo precisa ser melhor explicado ou detalhado; VOCÊ SABIA? curiosidades e indagações lúdicas sobre o tema em estudo, se forem necessárias; SAIBA MAIS: textos, referências bibliográficas e links para aprofundamen- to do seu conheci- mento; REFLITA: se houver a neces- sidade de chamar a atenção sobre algo a ser refletido ou dis- cutido sobre; ACESSE: se for preciso aces- sar um ou mais sites para fazer download, assistir vídeos, ler textos, ouvir podcast; RESUMINDO: quando for preciso se fazer um resumo acumulativo das últi- mas abordagens; ATIVIDADES: quando alguma atividade de au- toaprendizagem for aplicada; TESTANDO: quando o desen- volvimento de uma competência for concluído e questões forem explicadas; SUMÁRIO Banco de dados e índices ........................................................................ 12 O banco de dados .......................................................................................................................... 12 Conectando ao usuário de conexão do banco de dados no Windows ............................................................................................................................. 12 Conectando ao usuário de conexão do banco de dados no Linux ...................................................................................................................................... 16 O pgAdmin ........................................................................................................................ 18 Índices .....................................................................................................................................................22 Schemas – tablespaces e gerenciamento de usuários ...............27 Schemas ...............................................................................................................................................27 Tablespaces ........................................................................................................................................35 Gerenciamento de usuários ................................................................................................... 36 Roles ......................................................................................................................................37 Privilégios .......................................................................................................................... 38 Inicialização e interrupção do PostgreSQL ...................................... 41 Inicialização do PostgreSQL .................................................................................................... 41 Arquivo postgresql.conf .............................................................................................................42 Localização de arquivos .............................................................................................................42 Conexões e autenticação .......................................................................................43 SSL ..........................................................................................................................................44 Recursos de consumo .............................................................................................45 Atraso de vácuo baseado em custo ............................................................. 46 Relatório e registro de erros ............................................................................... 46 Interrupção do PostgreSQL .....................................................................................................47 Carga de dados no PostgreSQL ............................................................50 Transações PostgreSQL ............................................................................................................ 50 Uso do COPY FROM e ANALYSE ........................................................................................ 59 9 UNIDADE 02 Administração do SGBD PostgreSQL 10 INTRODUÇÃO Você sabia que o PostgreSQL é o Sistema Gerenciador de Banco de Dados de código aberto mais utilizado no mundo? É isso mesmo! Agora você sabe que as chances de uma empresa contratar um profissional que domine esse assunto são bem maiores por ser uma das mais demandadas na indústria. Sabia também que apesar da linguagem ser, relativamente, antiga (1986) ela está em constante evolução? Pois é! O grupo PostgreSQL permite que seus utilizadores contribuam com a correção de erros e melhorias da linguagem e, posteriormente, que os avaliadores lancem um novo release. Quem sabe você não será o próximo profissional a sugerir modificações? Mas para isso, vamos aprender tudo direitinho? A começar com a leitura do material. Vamos lá? Ao longo desta unidade letiva você vai mergulhar neste universo! Administração do SGBD PostgreSQL 11 OBJETIVOS Olá. Seja muito bem-vindo à Unidade II. Nosso objetivo é auxiliar você no desenvolvimento das seguintes competências profissionais até o término desta etapa de estudos: 1. Entender o conceito e a finalidade dos índices em um banco de dados PostgreSQL. 2. Gerenciar usuários e seus espaços de dados e esquemas no PostgreSQL. 3. Inicializar e interromper um banco de dados PostgreSQL. 4. Realizar carga de dados no PostgreSQL, visando processos de migração e povoamento de dados para testes. Então, preparado para uma viagem sem volta rumo ao conhecimento? Vamos conhecer mais desse assunto incrível e mais utilizado no mundo! Você não vai ficar de fora dessa, não é? Ao trabalho! Administração do SGBD PostgreSQL 12 Banco de dados e índices OBJETIVO: Ao término deste capítulo você será capaz de entender como funciona o PostgreSQL e compreender a estrutura de funcionamento por meio da criação de tabelas de banco de dados e compreender conceitos e implementação de índices. Isso será fundamental para o exercício de sua profissão. As pessoas que tentaram até conseguiram êxito na criação, mas sem a devida instrução e com uma alta carga de dados, talvez o sistema possa precisar de constantes ajustes e isso poderá colocar o sistema de uma empresa inacessível por horas. E isso, caso seja uma empresa totalmente on-line, cada minuto é crucial para a sustentabilidadede todos dentro do ecossistema empresa-funcionário-cliente. Agora a responsabilidade é toda sua para implementar e manter uma boa estruturação do banco de dados. E então, motivado(a) para desenvolver essa competência? Então vamos lá. Avante! O banco de dados Antes de aprendermos qualquer manipulação com o banco de dados é essencial saber como manipular os arquivos de configuração que controlam as operações básicas de uma instância do servidor PostgreSQL. Dessa forma, mostraremos como realizar a configuração de conexão do usuário PostgreSQL ao banco de dados no Windows e Linux. Nesse caso, você poderá ir para a seção de seu interesse. Posteriormente, vamos te mostrar como criar as tabelas de dados no banco de dados. Conectando ao usuário de conexão do banco de dados no Windows Se você já executou o processo de instalação no seu computador, vai ser fácil localizar o SQL Shell (psql). Basta localizar no Windows e abrir o terminal, veja na figura 1. Administração do SGBD PostgreSQL 13 Figura 1 – SQL Shell no Windows Fonte: Elaborado pela autora (2021). Agora, vamos te mostrar como realizar a conexão. Ao abrir o terminal do psql, você vai ter de escolher o servidor, o banco de dados e a senha configurada, mas não se preocupe. É super fácil, pois você pode iniciar com a configuração padrão, isto é, algumas partes você pode aceitar a sugestão e pressionar somente a tecla Enter. Vamos te mostrar: 1. Ao abrir o terminal irá aparecer a mensagem: Server localhost. Nesse caso, é só apertar a tecla Enter do teclado que você aceitará a configuração para o servidor local. 2. O próximo passo é a escolha da base de dados. No terminal terá Database postgres. Você pode aceitar apertando Enter. Nota: O postgres é o superusuário do PostgreSQL que já vem, por padrão, da instalação. Administração do SGBD PostgreSQL 14 3. Essa é a etapa da escolha da porta. Sugerimos deixar a porta padrão (que é a 5432) e para aceitar, basta pressionar a tecla Enter. 4. Agora, você precisa escolher o usuário. Nesse caso, você pode colocar o usuário que você criou durante a instalação pelo terminal que você praticou na Unidade passada, está lembrado(a) de como fazer? Caso contrário, pode deixar a forma padrão mesmo, só pressionando a tecla Enter. 5. Este é um momento importante: a senha. Utilize a mesma que você configurou quando criou o usuário. E então, você executou o passo a passo na sua máquina também? Ficou conforme a figura 2? O passo final é quando você entra na base de dados. Sabe como verificar? Vai aparecer no terminal (veja na figura 2) o postgres=#. Figura 2 – Terminal após a inserção das informações de configuração Fonte: Elaborado pela autora (2021). Prontinho! Viu como é super fácil? Se você tiver alguma dúvida, poderá digitar help diretamente no terminal que aparecerá uma série de sugestões de ajuda para você. Veja na figura 3 as sugestões de ajuda do terminal. Administração do SGBD PostgreSQL 15 Figura 3 – Sugestões de ajuda do terminal Fonte: Elaborado pela autora (2021). Como podemos ver na figura 3, temos algumas opções de ajuda que você pode digitar: • \ para os termos de distribuição. • \h para ajuda com os comandos SQL. • \? Para ajuda com os comandos do psql. • \g ou terminar com um ponto e vírgula para executar uma query. • \q para sair. Caso você tenha digitado alguns comandos e não conseguir sair da tela, pode pressionar as teclas ctrl + C para voltar ao postgres=#. Compreendido isso, já podemos partir para a criação das tabelas no banco de dados, preparado(a)? Antes disso, vamos ver como funciona a mesma configuração em um Sistema Linux. Administração do SGBD PostgreSQL 16 Conectando ao usuário de conexão do banco de dados no Linux Como você já sabe, na instalação do PostgreSQL no Linux, o usuário do PostgreSQL já vem, por padrão, como super usuário postgre (isto é, com permissões de root do sistema). Sendo assim, vamos começar e nos conectar ao usuário postgre? Para começar, você precisa digitar no terminal o comando de superusuário e entrar no usuário do postgres executando os seguintes passos: 1. Digite no terminal do Linux o comando: sudo su - postgres e pressione a tecla Enter. Nisso, você entrará no usuário do postgres para executar o próximo passo. 2. Entre na ferramenta padrão de acesso ao PostreSQL digitando: psql conforme figura 4. Figura 4 – Comando para acesso ao PostgreSQL Fonte: Elaborado pela autora (2021). Perceba que o nome do usuário é postgres=#. O # significa que ele é um superusuário e isso é necessário para outras manipulações do banco de dados que iremos ver. Para um usuário comum, a representação seria a seguinte: usuário=>. Prontinho! Não é fácil e super tranquilo? Tem dúvida e deseja ver qual o usuário que está conectado? Então você poderá digitar select current_user; e depois pressione a tecla Enter que já poderá ver o usuário ativo conforme a figura 5. Administração do SGBD PostgreSQL 17 Figura 5 – Identificando usuário ativo Fonte: Elaborado pela autora (2021). Para verificar se houve a conexão com o PostgreSQL e de forma correta, você pode digitar select inet_server_port(). Assim, você verificará qual o retorno obtido. Veja a progressão dos comandos na figura 6. Figura 6 – Identificando ativação Fonte: Elaborado pela autora (2021). Ainda, podemos verificar em qual porta o servidor está executando (ver figura 7). Para isso, podemos verificar por meio do seguinte comando: select current_database();. Figura 7 – Identificando ativação Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 18 Para o caso da observação de versões do PostgreSQL, podemos coletar informações do sistema operacional, do banco de dados etc. Vamos ver quais informações o comando select version(); pode nos retornar? Vamos analisar as Figuras 8 e 9 e responder: o que podemos compreender das versões com base nesse comando? Figura 8 – Comando para visualizar as versões Fonte: Elaborado pela autora (2021). Figura 9 – Informações de versões Fonte: Elaborado pela autora (2021). Você fez a mesma análise que eu? Vejamos: podemos observar que temos um PostgreSQL na versão 9.5.7 com o kernel Linux x86_64 em um sistema operacional Ubuntu server na versão 16.04.4. Então, compreendeu tudo? Vamos agora compreender o que é o pgadmin, para que serve e qual a sua relação com o PostgreSQL. O pgAdmin De acordo com o próprio site do pgAdmin (pgadmin.org), o pgAdmin é a plataforma de desenvolvimento e administração de código aberto mais popular e rica em recursos para PostgreSQL, o banco de dados de código aberto mais avançado do mundo e que pode ser manuseado em Linux, Unix, MacOS e Windows. O cliente pgAdmin pode acessar múltiplos servidores PostgreSQL e um servidor PostgreSQL também pode ser acessado por vários clientes pgAdmin simultaneamente. Administração do SGBD PostgreSQL 19 Ainda, o pgAdmin pode ser instalado por ambiente gráfico, automaticamente, durante a instalação do PostgreSQL no Windows ou via terminal e instalando as dependências no Linux. Ficou curioso(a) de como fazer a instalação no Linux? Vamos ver o passo a passo! 1. Digite no seu terminal Linux o comando: sudo apt-get install python2.7-dev virtualenv python-pip libpq-dev. Esse comando irá instalar as dependências para o funcionamento. Figura 9 – Instalação das dependências no Linux Fonte: Elaborado pela autora (2021). 2. Agora, vamos criar um diretório do boot com o comando: mkdir -p ~/apps/pgadmin4/ e em seguida entrar no diretório com o comando cd apps/pdadmin4/ (ver figura 10) para a instalação dos demais repositórios e, posteriormente, a inicialização da interface gráfica. Figura 10 – Criação do diretório do boot Fonte: Elaborado pela autora (2021). Lembrando que o pgadmin4 é a versão atual do pgAdmin, futuramente, você poderá se deparar com novas versões. Administração do SGBD PostgreSQL20 3. Depois de criado o diretório, iremos utilizar o comando virtualenv venv -p /usr/bin/python2.7 para podermos criar um ambiente isolado para evitar conflitos, bugs ou incompatibilidade de sistemas. Figura 11 – Criação do ambiente isolado Fonte: Elaborado pela autora (2021). 4. Pronto! Agora é só ativar com o comando: source ./venv/bin/ activate, e para saber que está ativo, basta observar o (venv) antes da identificação do usuário postgres. Veja a Figura 12 para melhor compreensão. Figura 12 – Comando para a ativação Fonte: Elaborado pela autora (2021). 5. Agora vamos fazer o download do pgAdmin com os seguintes comandos: wget https://ftp.postgresql.org/pub/pgadmin/ pgadmin4/v1.5/pip/pgadmin4-1.5-py2.py3-none-any.whl. E, posteriormente, o comando ls para listar o diretório para observar a orientação da pasta do próximo comando: pip install pgadmin4-1.5-py2.py3-none-any.whl. Veja o comando melhor nas figura 13 e 14. Administração do SGBD PostgreSQL 21 Figura 13 – Download do pgAdmin Fonte: Elaborado pela autora (2021). Figura 14 – Instalação do pgAdmin Fonte: Elaborado pela autora (2021). Observe que o comando ls permitiu gerar o endereço (destacado em amarelo) e inserimos após o comando pip install (destacado em branco) conforme apresentado na figura 14. Se você estiver utilizando uma máquina virtual (VirtualBox, por exemplo) ou realizando um acesso remoto, é necessário editar o documento config.inf para que o servidor permita o acesso. Contudo, utilize apenas para testes, em produção não é seguro. Assim, terminamos a instalação. Para abrirmos o pgAdmin (ver figura 15), basta digitar o seu IP seguido de : e número da porta 5050. Por exemplo: digamos que seu IP seja 192.198.1.108. Então, o comando será: 192.198.1.108/5050. Administração do SGBD PostgreSQL 22 Figura 15 – Imagem do pgAdmin no navegador Fonte: Elaborado pela autora (2021). No Sistema Operacional Windows, basta ir no menu de inicialização, procurar pelo diretório do PostgreSQL e dentro estará o pgAdmin. Agora, para finalizarmos totalmente e partirmos para o próximo assunto, devemos instalar o phppgadmin (um agendador de tarefas para PostgreSQL que pode ser gerenciado usando o pgAdmin) com o comando apt-get install phpphadmin, conforme podemos ver na figura 16. Figura 16 – Instalação do phppgAdmin Fonte: Elaborado pela autora (2021). Você realizou a instalação conosco? Ah! Vale lembrar que caso o pgAdmin solicite senha, lembre-se: é a mesma que você utilizou no processo de instalação do PostgreSQL na Unidade anterior. E então? Depois de tudo instalado na sua máquina, está ansioso(a) para colocar a mão na massa? Vamos para o próximo assunto! Índices A documentação do PostgreSQL, disponível aqui e traduzida para o português brasileiro, afirma que os índices são um modo comum de melhorar o banco de dados e permite que o servidor de banco de dados Administração do SGBD PostgreSQL http://pgdocptbr.sourceforge.net/) 23 possa localizar e retornar linhas selecionadas em um tempo mais hábil. Contudo, é recomendável a utilização com continência, pois os índices podem produzir esforço adicional para o sistema de banco de dados. Sendo assim, para uma melhor compreensão do funcionamento dos índices, é essencial sabermos como manipular as tabelas do banco de dados. Você pode ter visto em outros momentos do curso, mas vale reforçar, pois é de extrema importância você saber manusear as tabelas. Primeiramente, vamos ver como criar! Para criar a estrutura de uma tabela, há algumas regras de nomeação. Nesse caso, não devemos duplicar os nomes dos objetos do mesmo proprietário. E outra consideração importante é que para os nomes de tabelas e nomes de colunas sugere-se iniciar com uma letra e conter os somente os seguintes símbolos: A_Z, a_z, 0_9, _, $, e #. Como você viu na Unidade anterior, então já sabe que uma tabela é composta por linhas e colunas nomeadas, cujo número e ordem de apresentação são fixos. Contudo, o número de linhas pode variar conforme a expansão do banco de dados, refletindo nessa quantidade armazenada. Ainda, para os valores que são atribuídos à coluna dos dados, há um tipo de dado associado. Vejamos a sintaxe: CREATE TABLE nome_tabela ( coluna1 tipoDoDado, coluna2 tipoDoDado, coluna3 tipoDoDado, .... ); Ainda, devemos levar em consideração: a chave primária, que considera como identificador único para as linhas da tabela; a chave estrangeira, que especifica o valor correspondente em uma linha de outra tabela, e o valor não nulo, que especifica que uma coluna não poderá receber o valor nulo. Administração do SGBD PostgreSQL 24 Vejamos uma demonstração com a chave primária, estrangeira e não nulo e tente identificar qual delas é a chave estrangeira e por quê: CREATE TABLE professores ( professorID integer NOT NULL PRIMARY KEY, professorNome varchar(255), professorSobrenome varchar(255), professorDisciplina varchar(255) NOT NULL, campus varchar(255) ); Conseguiu identificar qual é a chave estrangeira? Se você respondeu ProfessorDisciplina porque está associada a outra tabela, então você acertou! Devemos levar em consideração para o banco de dados que: quando um valor é adicionado ao banco, isto é, quando uma linha é criada, e nenhum valor é especificado para determinadas colunas, então, você pode automatizar para adicionar um valor padrão. Vejamos: CREATE TABLE pessoas ( pessoaID integer NOT NULL, pessoaNome varchar(255), pessoaSobrenome varchar(255) DEFAULT ‘NA’, pessoaCPF varchar(255), cidade varchar(255) DEFAULT ‘NA’ ); Além do valor DEFAULT, existe o AUTO_INCREMENT para a chave- primária, que é utilizado para incrementar automaticamente o valor do campo ao ser adicionado a uma linha. Tratando-se de índices, há vários tipos de índices e cada Sistema Gerenciador de Banco de Dados pode administrar seus próprios tipos de índices. Para o nosso caso, vamos considerar o índice do PostgreSQL. Mas você já sabia disso, não é mesmo? Vamos ver um exemplo! Administração do SGBD PostgreSQL 25 Vamos supor que temos a seguinte tabela no banco de dados: CREATE TABLE professores ( professorID integer NOT NULL PRIMARY KEY, professorNome varchar(255), professorSobrenome varchar(255), professorDisciplina varchar(255) NOT NULL, campus varchar(255) ); E foi emitida a seguinte requisição: SELECT ProfessorNome FROM professores WHERE professorID = $variavel; Dessa forma, poderá haver desperdício de processamento, pois se formos considerar múltiplas requisições para retornar na consulta uma única – ou nenhuma – linha correspondente para o Id do professor (professorID), então o SGBD teria de procurar em cada linha da tabela professores. Então, o que poderíamos fazer para otimizar esse serviço? Simplesmente criando o comando para gerar índices. Vejamos: CREATE INDEX idx_professores_professorID ON professores (professorID); Assim, a busca ao invés de varrer toda a tabela, irá procurar somente nos campos de interesse, cujo nome idx_professores_professorID é apenas uma recomendação, pois a nomeação é livre. Contudo, sugere-se que escolha um nome que você possa associar mais tarde para que serve o índice. Para o caso de remover o índice criado, basta utilizar o comando DROP INDEX, assim como para os comandos de atualização UPDATE e remoção DELETE. Administração do SGBD PostgreSQL 26 SAIBA MAIS: Quer se aprofundar neste tema? O PostgreSQL também possui vários tipos de índices, tais como: B-tree (árvore B), R-tree (árvore R), hash e GIST. E cada uma delas utiliza seu próprio algoritmo. Quer saber mais sobre eles? Você pode acessaro conteúdo aqui. RESUMINDO: E então, gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que antes de manipularmos um banco de dados, é necessário conectar o usuário ao banco de dados. Dessa forma, apresentamos um passo a passo de como realizar essa conexão com base em um sistema operacional Windows e Linux. Também conhecemos o pgAdmin, que além de poder acessar múltiplos servidores PostgreSQL, um servidor PostgreSQL, também pode ser acessado por vários clientes pgAdmin simultaneamente. E te mostramos como realizar a instalação do pgAdmin em linha de código com posterior abertura do ambiente gráfico. Também vimos como criar uma tabela em um banco de dados e a utilidade das chaves primária e secundária. Por fim, vimos a importância do uso de índices em bancos de dados, pois com ele é possível otimizar as consultas e melhorar o desempenho do banco de dados. Administração do SGBD PostgreSQL http://pgdocptbr.sourceforge.net/pg80/indexes-types.html 27 Schemas – tablespaces e gerenciamento de usuários OBJETIVO: Agora que você já sabe como criar um usuário, conectá- lo a um banco e ao PostgreSQL, já criou tabelas e viu como otimizar buscas com índices, vamos para o próximo passo. Ao término deste capítulo você será capaz de compreender o funcionamento de schemas e tablespaces e administrar usuários e banco de dados por interface gráfica e por linhas de comando. Além disso, irá aprender como trabalhar com recursos de autenticação e atribuição de regras e privilégios. Você sabia que esse tipo de trabalho é extremamente importante para uma empresa? Pois é! Por meio desses recursos, é possível proteger os dados da empresa conforme a permissão de cada funcionário. E isso é uma grande responsabilidade, não é mesmo? Então vamos lá. Rumo ao avanço! Schemas Um schema (ou esquema) é um namespace que organiza o banco de dados em grupos lógicos e pertence a um usuário do banco de dados. Dessa forma, os objetos. Contudo, não interfere na forma com que os dados são armazenados. A documentação do PostgreSQL define schema como um agrupamento de dados que contém nome e que os usuários e os grupos de usuários são compartilhados por todo o agrupamento. Entretanto, isso não significa que os usuários de um agrupamento possuam todos os bancos de dados do agrupamento, a possibilidade existe apenas quando configurado no sistema de gerenciamento de usuários. Em um schema, para os acessos ao banco de dados, em todas as conexões dos clientes com o servidor, só são permitidos aqueles que foram especificados durante o pedido de conexão. Administração do SGBD PostgreSQL 28 Dessa forma, é possível utilizar o conceito de cross-database, ou seja, fazer consultas em SQL ao banco realizando cruzamento de informações entre campos de tabelas que estão em bancos de dados diferentes. Em grandes aplicações, o uso de schema também permite que softwares desenvolvidos por terceiros possam ficar logicamente separados para não ocorrer colisão com os nomes de outros objetos existentes no banco de dados. Vamos ver como criar um schema? Vejamos a sintaxe: CREATE SCHEMA nome_esquema; Também podemos criar esquemas exclusivos para determinados para usuários. Vejamos: CREATE SCHEMA AUTHORIZATION camila; Nesse caso, o esquema será autorizado para o usuário camila e, consequentemente, terá o mesmo nome. Entretanto, podemos criar um esquema com outro nome e que pertença ao usuário camila. CREATE SCHEMA IF NOT EXISTS novo_esquema AUTHORIZATION camila; Pronto! Criamos um schema chamado novo_esquema para o usuário camila. O IF NOT EXISTS verificará se não há outro esquema com o mesmo nome. Também, para melhor organização dos dados, é possível criar um schema com uma tabela e visualização da seguinte forma: CREATE SCHEMA universo CREATE TABLE marvel (personagem, principal poder,filmes) CREATE VIEW melhores AS SELECT personagem FROM marvel WHERE principal poder IS NOT NULL; Administração do SGBD PostgreSQL 29 Observe que os subcomandos não estão com ponto e vírgula. Ainda, você também poderá se deparar com a seguinte forma de schema que obtém o mesmo resultado: CREATE SCHEMA universo; CREATE TABLE universo.marvel (personagem, principal poder,filmes); CREATE VIEW melhores AS SELECT personagem FROM universo.marvel WHERE principal poder IS NOT NULL; Caso seja necessário remover os schemas do banco de dados, há duas formas de remover: removendo um schema vazio e removendo um schema e todos os objetos que possui. Vejamos o caso em que removerá todos os esquemas considerando que os objetos já foram removidos: DROP SCHEMA universo; O comando para remover o schema e todos os seus objetos não difere muito. Só acrescentamos a palavra CASCADE. Vejamos: DROP SCHEMA universo CASCADE; Você sabia que além de criar um schema por linhas de comando, também podemos criar em ambiente gráfico? Tem alguma ideia de onde? Se você respondeu pelo phppgadmin, acertou! Por isso que te falamos do pgAdmin e do phppgadmin no capítulo anterior. Lembra-se disso? Então, agora que você já viu os comandos em linhas de comando vamos te mostrar como criar schemas com base em um ambiente gráfico, o phppgadmin. Vejamos o passo a passo: 1. No phppgadmin, expanda o banco de dados de seu interesse que deseja criar um schema. Em Schemas, clique com o botão direito do mouse e depois em Create > Schema ... (conforme observado na Figura 17). Administração do SGBD PostgreSQL 30 Figura 17 – Criando um Schema Fonte: Elaborado pela autora (2021). 2. Após isso, uma janela para a inserção dos dados do Schema desejado será aberta. Lembra-se do que te falamos para os usuários dos schemas em linhas de comando? A regra para o ambiente gráfico é a mesma. Então, você precisará preencher com o nome do Schema, o usuário e um comentário. Administração do SGBD PostgreSQL 31 Figura 18 – Preenchendo um Schema Fonte: Elaborado pela autora (2021). 3. Após preenchido, podemos observar que o schema criado posicionou-se após o schema público. Administração do SGBD PostgreSQL 32 Figura 19 – Schema criado Fonte: Elaborado pela autora (2021). E para criar as tabelas dentro de um Schema em um ambiente gráfico, o procedimento também é supersimples. Vejamos o passo a passo: 1. Basta procurar o schema de interesse, procurar no menu expandido o agrupamento das tabelas e clicar com o botão direito do mouse indo até o Create e depois Table... (vejamos na figura 20). Administração do SGBD PostgreSQL 33 Figura 20 – Schema criado Fonte: Elaborado pela autora (2021). 2. Com isso, a janela de preenchimento da tabela é aberta com os campos para o preenchimento. Nela, é possível criar de forma gráfica ou por meio do comando SQL para os casos em que a linha de comando é gerada automaticamente ou pode ser modificada manualmente. Vejamos na figura 21 com os campos preenchidos e na Figura 22 a opção de criação gerada automaticamente após o preenchimento dos campos. Administração do SGBD PostgreSQL 34 Figura 21 – Criação da tabela Fonte: Elaborado pela autora (2021). Figura 22 – Comando SQL para gerar tabela. Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 35 Viu como é tudo muito prático? Perceba que na Figura 22 foi gerado o tablespace pg_default que será nosso próximo assunto. Vamos lá! Tablespaces Um tablespace (ou espaços da tabela) pode ser considerado um contêiner para dados, cujos espaços na tabela do PostgreSQL possibilita aos superusuários definirem o local no sistema de arquivos em que os arquivos dos objetos de banco de dados podem ser armazenados. Depois de criado o tablespace, é possível atribuir nomes lógicos aos locais físicos no disco rígido do servidor e, assim, facilitar a referenciação dos objetos de banco de dados.A inicialização de um cluster PostgreSQL envolve automaticamente duas formas de guardar os dados, cujo tablespace é chamado de pg_default, para guardar todos os dados do usuário, e o pg_global para guardar todos os dados do sistema que é visto por todos os bancos de dados. Por padrão, os tablespaces ficam localizados no mesmo diretório do seu cluster, entretanto, você pode armazenar em qualquer disco do servidor. Também permitem que você possa mover os objetos de banco de dados existentes para novos. Para definir um espaço de tabela, você utilizará o comando CREATE TABLESPACE. Vale ressaltar que o espaço deverá ser um diretório vazio e que pertença ao usuário do PostgreSQL, e que todos os objetos criados no tablespace serão armazenados em arquivos sobre o diretório especificado. Ainda, o local escolhido deverá possibilitar o armazenado removível, pois o cluster não funcionará caso o tablespace esteja ausente ou perdido. Ficou curioso com como executar? Vejamos um exemplo: CREATE TABLESPACE second LOCATION '/var/lib/postgresql/9.5/'; Administração do SGBD PostgreSQL 36 Lembre-se de que o usuário que você esteja utilizando para criar o tablespace deverá ter a permissão de salvar. Note que agora o seu banco de dados será salvo em /var/lib/postgresql/9.5/. Agora, a partir da versão 9.4, é possível mover um grupo de objetos de um tablespace para outro. Por exemplo: para os casos em que você já tenha criado o banco de dados e deseje mover todos os objetos do banco de dados para o tablespace criado, então, podemos definir da seguinte forma: ALTER DATABASE meuDB_anterior SET TABLESPACE second; Nos casos em que se deseja mover todo o banco de dados: objetos, schemas, tabelas etc., você utilizará o seguinte comando: ALTER TABLESPACE pg_default MOVE ALL TO second; Durante a migração com o MOVE ALL TO, todo o banco de dados ou tabela ficarão bloqueados temporariamente. Gerenciamento de usuários Uma questão bastante importante em banco de dados é o gerenciamento de usuários, pois, em toda grande aplicação, um banco de dados pode ser acessado por vários usuários e por motivos de segurança é necessário implementar controle de acessos. Está lembrado de como criamos os superusuários e fizemos a conexão com o servidor no capítulo anterior? Pois são eles quem possuem controle dos objetos de banco de dados, tais como tabelas e visões. E, também, podem conceder privilégios de acesso. Diante do assunto de gerenciamento de usuários, para um bom gerenciamento do banco de dados, devemos em mente quem são os usuários, grupos de usuários e qual a função que cada um atua no contexto da segurança do banco de dados. Sendo assim, vamos primeiramente conhecer sobre usuários e grupos no PostgreSQL, e depois como conceder privilégios. Administração do SGBD PostgreSQL 37 Roles Tratando-se de usuários e grupos, um bom gerenciamento é essencial para o banco de dados. Em versões anteriores do PostgreSQL, os usuários e grupos de usuários eram entidades de tipos distintos, ou seja, utilizavam USER e GROUP. Atualmente (a partir da versão 8.1), são utilizadas as Roles que pode atuar como um usuário, um grupo ou desempenhar ambos os papéis. Contudo, não elimina o uso dos comandos CREATE USER e CREATE GROUP por questões de compatibilidade, mas é interessante que vejamos os comandos mais atuais. Nesse sentido, veremos como criar e gerenciar usuários por meio de Roles. Você já sabe que na instalação do PostgreSQL, por padrão, já é criado o superusuário postgres. Agora, vamos ver como criar usuários comuns. Vejamos como criar um usuário com senha que pode ser utilizado até uma data específica ou por tempo indeterminado: CREATE ROLE camila LOGIN PASSWORD '0123456' CREATEDB VALID UNTIL 'infinity'; Olhando para o comando, você parou para pensar o que significa CREATEDB VALID UNTIL ‘infinity’? Pois bem! Esse termo no comando significa que a validade daquele usuário é por tempo infinito, isto é, por tempo indeterminado. Ainda, é possível criar outro superusuário – além do postgres. Sendo assim, vejamos um exemplo: você é um administrador que usa o superusuário postgres e precisa conceder privilégios de superusuário a um colega com contrato predefinido. Então, para que você não forneça suas credenciais, você poderá executar um comando exclusivamente para ele com tempo determinado. Vamos supor que o usuário seja Harry Potter e a data de expirar seja 1º de janeiro de 2025. Vejamos: CREATE ROLE potter LOGIN PASSWORD '0123456' SUPERUSER VALID UNTIL '2025-1-1 00:00'; Administração do SGBD PostgreSQL 38 Caso você deseje remover algum usuário (até mesmo antes da data de expirar), você pode utilizar o seguinte comando: DROP ROLE camila; Uma Role pode possuir e ser contida por outra Role. Para o caso de grupos de usuários, você também pode considerar a criação de um grupo que receba determinados privilégios. Vamos ver? CREATE ROLE grupo1 INHERIT; O INHERIT significa que qualquer membro do grupo1 terá, automaticamente, direitos concedidos ao papel do grupo1, exceto para superusuário. Então, podemos fazer a seguinte pergunta: como associar o usuário Hermione que foi recém-criado ao grupo1? Simples! Utilizando o comando GRANT. Vejamos: GRANT grupo1 TO hermione; Gostou do que aconteceu com Hermione sendo adicionada ao grupo e ganhando privilégios do grupo automaticamente? Bem prático, não é mesmo? O comando GRANT faz parte do assunto sobre privilégios. Vamos ver! Privilégios No PostgreSQL os privilégios precisam de um pouco mais de atenção devido ao controle minucioso que ele possui. Alguns dos privilégios de nível de objeto usam os seguintes comandos: SELECT, INSERT, UPDATE, ALTER, EXECUTE, TRUNCATE; e um qualificador para os chamados WITH GRANT. Vejamos a sintaxe: GRANT nome_privilegio TO alguma_role; Agora, para que você entenda melhor o uso e os termos, vamos ver um exemplo prático em um passo a passo com alguns comandos que você já está familiarizado: Administração do SGBD PostgreSQL 39 1. Inicialmente, devemos criar um usuário e senha com o comando: CREATE ROLE admin LOGIN PASSWORD '0123456'; 2. Agora, iremos precisar do banco de dados. Então vamos criar um banco de dados chamado meubd de propriedade do usuário admin. Ao afirmar que um usuário é owner de um banco de dados, significa que ele já recebeu todos os privilégios. CREATE DATABASE meubd WITH owner = admin; Ao criar o banco de dados, é necessário entrar no banco de dados para gerar os comandos GRANT. Nesse caso, você entrará com o comando \c meubd. 3. Agora, criaremos um schema do banco de dados: CREATE SCHEMA meu_schema; 4. Então, já podemos utilizar o comando GRANT para conceder privilégios ao usuário admin: GRANT ALL ON ALL TABLES IN SCHEMA IN SCHEMA meu_schema TO admin WITH GRANT OPTION; Com isso, o usuário admin poderá conceder privilégios de alterações a outros usuários no shema meu_schema dentro do banco de dados meubd. O inverso também poderá acontecer com o comando REVOKE que remove os privilégios. Para trabalhar com o GRANT existem algumas premissas, que são: Você precisa ser o titular do privilégio que você está concedendo e, também, deve ter o poder de conceder privilégios. Para os comandos DROP e ALTER, os privilégios sempre permanecem com o proprietário de um objeto e nunca podem ser concedidos. Administração do SGBD PostgreSQL 40 SAIBA MAIS: Quer se aprofundar neste tema? Com mecanismos do PostgreSQL é possível realizar controle de concorrência. Quer saber mais sobre esse tema? Você pode acessar o conteúdo aqui. RESUMINDO: Chegamos ao fim do nosso capítulo. Gostou do que lhe mostramos? Agora, vamos recapitular tudo o que vimos para ver se o conteúdo foi fixado. Nós falamos sobre o funcionamento de schemas. Então, você viu que os schemas são agrupamentos lógicos do banco de dados que o superusuário pode manipular. Agora sabemos que com o usode schemas pode melhorar a segurança do nosso banco de dados, pois, por meio de schemas, podemos separar aplicações desenvolvidas por terceiros simplesmente criando um schema e deixando-as logicamente separadas para não ocorrer colisão com os nomes de outros objetos existentes no banco de dados. Também vimos o conceito e como manipular o tablespaces, administrando usuários e banco de dados por interface gráfica e por linhas de comando. Por fim, vimos como trabalhar com recursos de autenticação e atribuição de regras e privilégios. Administração do SGBD PostgreSQL https://tinyurl.com/yy2vj43k 41 Inicialização e interrupção do PostgreSQL OBJETIVO: Agora que você já sabe como administrar usuários, pode otimizar uma busca por meio de shemas e controlar acessos, vamos para o próximo passo. Ao término deste capítulo você será capaz de compreender como realizar a inicialização e interrupção do PostgreSQL e conhecer os principais parâmetros do arquivo postgresql.conf. Além disso, você irá aprender como parar e reiniciar o servidor PostgreSQL usando estratégias smart, fast, immediate e aplicar o comando kill. Você sabia que para qualquer operação prévia de acesso ao banco de dados é necessária a inicialização do servidor PostgreSQL? Sem ele inicializado, poderá impedir a execução das atividades de acesso ao banco de dados. Pois é! E isso requer uma série de procedimentos que você precisa executar para realizar uma boa administração do banco de dados. E então? Motivado(a) para desenvolver essa competência? Vamos nessa! Inicialização do PostgreSQL Você já sabe que para qualquer operação prévia de acesso ao banco de dados é preciso a inicialização do servidor. Há várias formas de inicializar o PostgreSQL, mas o nome padrão para uso por utilitários, usuários e aplicativos terceiros é denominado postgres. Assim, você poderá iniciar por meio do seguinte comando: Postgres -D /bd/data Tal comando executará o PostgreSQL em primeiro plano enquanto estiver com conexão ativa ao usuário do PostgreSQL. Para o caso da execução em background, o seguinte comando poderá ser utilizado: Postgres & Administração do SGBD PostgreSQL 42 Para corroborar com a auditoria e facilitar o diagnóstico de problemas, é fundamental armazenar a saída stdout e stderr do servidor em um arquivo de log. Para isso, você poderá utilizar o seguinte comando: Postgres -D /bd/data > postgresql.log 2 > &1 & Entretanto, há uma forma muito simples de inicializar o PostgreSQL em background e enviar o stdout e stderr para um arquivo de log, que é utilizando o utilitário pg_ctl. Sendo assim, é necessário realizar a configuração para o armazenamento no arquivo postgresql.conf e, dessa forma, utilizar apenas uma linha de comando para a inicialização: pg_ctl start De acordo com a documentação do PostgreSQL, o pg_ctl é um utilitário que pode ser utilizado para mostrar o status de um servidor ativo, para iniciar, parar ou reiniciar o PostgreSQL. Além de o pg_ctl poder utilizar a saída padrão para um arquivo de log, é possível fornecer opções para uma parada controlada. Arquivo postgresql.conf Ainda, o superusuário pode configurar algumas variáveis pelo arquivo postgre.conf (ou diretamente na linha de comando) para abordar conceitos de dimensionamento para itens de hardware que estão operando e controlar a autenticação de clientes etc. Para visualizá-los, em pg_settings, filtrar postmaster. Dessa forma, por meio da documentação pública disponibilizada pelo PostgreSQL (2019) em seu domínio (disponível em: https://www. postgresql.org), listamos a seguir as principais utilizadas. Localização de arquivos A localização de arquivos é suportada a partir da versão 9.5 do PostgreSQL e sua versão atual é a 12 com sua versão 13 já em desenvolvimento. Por meio da localização de arquivos é possível que Administração do SGBD PostgreSQL 43 os backups dos arquivos de configuração sejam realizados de forma correta quando mantidos separadamente. Vejamos as configurações possíveis (disponibilizadas na documentação do PostgreSQL), cujas parametrizações só podem ser definidas na inicialização do servidor: • data_directory: especifica o diretório para ser usado para armazenamento de dados. • config_file: só pode ser definido por meio da linha de comando. Ele especifica o arquivo de configuração do servidor principal. • hba_file: especifica o arquivo de configuração para autenticação baseada em host, comumente chamado de pg_hba.conf. • ident_file: comumente chamado de pg_ident.conf. Especifica o arquivo de configuração para mapeamento de nome de usuário. • external_pid_file: especifica o nome de um arquivo de ID de processo (PID) adicional que o servidor deve criar para uso por programas de administração de servidor. Conexões e autenticação As conexões e autenticação envolvem a administração do número de slots de conexão que são reservados para superusuários, soquete, grupo do proprietário, porta, número máximo de conexões etc. Vejamos as principais: • port: é o número da porta TCP na qual o servidor escuta. Por padrão, assume a 5432. • max_connections: define o número máximo de conexões simultâneas com o PostgreSQL. O padrão de inicialização é de 100 conexões máximas. Contudo, pode ser configurável caso as configurações do kernel não as suporte. • listen_addresses: define o(s) endereço(s) TCP/IP nos quais o servidor deve escutar conexões de aplicativos cliente, cuja entrada 0.0.0.0 é para endereços IPv4 e : : para IPv6. Administração do SGBD PostgreSQL 44 • superuser_reserved_connections: especifica o número de slots de conexão que são reservados para conexões de superusuários do PostgreSQL, cujo valor padrão é de três conexões. • unix_socket_directories: define o diretório do(s) soquete(s) do domínio Unix nos quais o servidor deve escutar as conexões dos aplicativos clientes e vários sockets podem ser criados listando vários diretórios separados por vírgula. Ainda, esse parâmetro é irrelevante no Windows, pois não possui soquetes de domínio Unix. • unix_socket_group: especifica o grupo proprietário do(s) soquete(s) do domínio Unix. Vale considerar que o usuário proprietário é sempre o que inicia o servidor. • unix_socket_permissions: especifica as permissões de acesso do(s) soquete(s) do domínio Unix, cujas permissões padrões são: 0777: qualquer pessoa pode se conectar. 0700: somente usuário. 0770: somente usuário e grupo. • Bonjour: permite anunciar a existência do servidor via Bonjour. • Bonjour_name: especifica o nome do serviço Bonjour. Caso o servidor não seja compilado com suporte Bonjour, então esse parâmetro é ignorado. • password_encryption: determina o algoritmo a ser usado para criptografar a senha, cujo padrão é md5. Apenas quando a senha é especificada em CREATE ROLE ou ALTER ROLE. SSL O PostgreSQL possui suporte nativo para conexões do tipo SSL que criptografa comunicações cliente/servidor. Contudo, necessita que o OpenSSL seja instalado nos sistemas cliente e servidor. Vejamos os principais parâmetros: • SSL: ativa as conexões SSL, cujo padrão é OFF. Administração do SGBD PostgreSQL 45 • ssl_ca_file: define o nome do arquivo que contém a autoridade de certificação do servidor SSL, cujos caminhos relativos são de acordo com o diretório dos dados. • ssl_cert_file: define o nome do arquivo que contém o certificado do servidor SSL, cujos caminhos são relativos ao diretório de dados. • ssl_crl_file: define o nome do arquivo que contém a lista de revogação de certificado do servidor SSL. Recursos de consumo O PostgreSQL também utiliza vários recursos do sistema operacional, especialmente quando está ativo ou ao iniciar. Com isso, por meio do PostgreSQL, podemos administrar memória, disco, recursos do kernel, atraso de vácuo baseado em custo etc. Vejamos os principais parâmetros: • shared_buffers: refere-se à quantidade de memóriaque o servidor utiliza para buffers de memória compartilhada, cujo valor mínimo é 128 kilobytes. • huge_pages: controla se as páginas grandes são solicitadas para a área de memória principal compartilhada. • temp_buffers: determina o número máximo de buffers temporários por cada sessão de banco de dados. • max_prepared_transactions: Define o número máximo de transações que podem estar no estado “preparado” simultaneamente, cujo padrão é 0. • work_mem: a quantidade de memória a ser usada por operações internas de classificação e tabelas de hash antes de gravar em arquivos de disco temporários, cujo valor padrão é 4 MB. • maintenance_work_mem: determina a quantidade máxima de memória a ser utilizada pelas operações de manutenção, tais como VACUUM, CREATE INDEX e ALTER TABLE ADD FOREIGN KEY, cuja quantidade máxima padrão é de 64 MB. Administração do SGBD PostgreSQL 46 • autovacuum_work_mem: especifica a quantidade máxima de memória a ser usada por cada processo de trabalho autovacuum, cujo padrão é -1. • temp_file_limit: especifica a quantidade máxima de espaço em disco que um processo pode usar para arquivos temporários. Apenas superusuários podem alterar essa configuração. Atraso de vácuo baseado em custo No momento da execução dos comandos VACUUM (recupera o armazenamento ocupado por duplas mortas, isto é, coleta de lixo) e ANALYZE (coleta estatísticas sobre um banco de dados), o sistema mantém um contador interno que mantém o controle do custo estimado das várias operações de I/O (entrada e saída) que são realizadas. • vacuum_cost_delay: período de tempo, em milissegundos, que o processo ficará suspenso quando o limite de custo for excedido, cujo valor padrão é 0. • vacuum_cost_page_miss: custo estimado para limpar um buffer que deve ser lido do disco, cujo valor padrão é 10. • vacuum_cost_page_dirty: custo estimado cobrado quando o vácuo modifica um bloco que estava limpo anteriormente, cujo valor padrão é 20. Relatório e registro de erros O PostgreSQL suporta vários métodos para gerar relatório e registro de erros, coletando mensagens de log, por exemplo, e redirecionando para arquivos especificando o diretório de dados etc. Vejamos os principais: • log_destination: por padrão, esse parâmetro registra apenas erros stderr. Contudo, é possível configurar no arquivo postgresql.conf ou a partir da linha de comando do servidor. • logging_collector: na própria documentação do PostgreSQL afirma-se que essa abordagem é mais útil do que registrar no syslog, pois alguns tipos de mensagens podem ficar ocultas na Administração do SGBD PostgreSQL 47 saída do syslog. Este parâmetro ativa o coletor de log, que é um processo em segundo plano que captura mensagens de log enviadas para stderr e as redireciona para arquivos de log. • log_directory: este parâmetro determina o diretório no qual os arquivos de log serão criados e pode ser especificado com um caminho absoluto ou relativo dos dados. • log_filename: define os nomes dos arquivos de log criados. Caso a saída em formato .csv estiver habilitada em log_destination, então será anexada ao nome do arquivo de log com carimbo da data e hora para criar o nome do arquivo no formato de saída .csv. • log_min_messages: controla quais níveis de mensagens são gravadas no log do servidor, cujo padrão é WARNING. Quanto mais avançado for o nível, menos mensagens serão enviadas para o log. Interrupção do PostgreSQL Para interromper o PostgreSQL, é utilizado o comando Kill do Linux. Entretanto, requer o número do PID (Id do processo em execução) principal do PostgreSQL. O comando Kill envia três tipos de notificações (sinais) para o serviço do PostgreSQL: • TERM (modo smart shutdown): o banco aguardará todas as conexões existentes finalizarem suas transações, mas também não aceitará novas. kill -TERM 1880 • INT (modo fast shutdown): além de não aceitar novas conexões, envia um sinal TERM para que todas as conexões existentes recebam um sinal para interromper suas transações e fecharem. Contudo, este sinal também aguardará as conexões terminarem para parar o banco. kill -INT 1880 Administração do SGBD PostgreSQL 48 • QUIT (modo immediate shutdown): envia um sinal QUIT para todas as conexões e, assim, são encerradas imediatamente e fechadas subitamente. Caso o banco encerre com o sinal QUIT, ao inicializar, entrará em recovery para desfazer as ações que ficaram incompletas. kill -QUIT 1880 Para obter o PID do processo principal, você pode utilizar o comando ps. Vejamos as duas alternativas: Primeira alternativa: ps -ef f | grep postgres Uma alternativa é por meio do arquivo postmaster.pid com o seguinte comando: Cat /db/data/postmaster.pid Também, há a opção de parar o servidor sem a necessidade do número do PID, que é utilizando o pg_ctl com o seguinte comando: Pg_ctl stop -mf Caso queira somente reiniciar, então o comando será: Pg_ctl restart Já para os casos em que há alteração de parâmetros do postgre. conf, o ideal é utilizar o comando para recarregar os parâmetros: reload. Vejamos: Pg_ctl reload Administração do SGBD PostgreSQL 49 SAIBA MAIS: Ficou curioso(a) para conhecer mais parâmetros do postgresql.conf e quer se aprofundar neste tema? Por meio da documentação do PostgreSQL você pode acessar todos os parâmetros e suas devidas descrições. Você pode acessar o conteúdo aqui. RESUMINDO: Chegamos ao fim do nosso capítulo. Gostou do que lhe mostramos? Agora, vamos recapitular tudo o que vimos para ver se o conteúdo foi fixado. Nós falamos sobre a inicialização do PostgreSQL e como armazenar a saída stdout e stderr do servidor em um arquivo de log por meio do utilitário pg_ctl. Mostramos os principais parâmetros variáveis do arquivo postgre.conf e falamos como interromper o servidor de várias formas: com o número do PID por meio do comando kill e usando estratégias smart e fast em que o servidor aguarda as conexões serem encerradas para parar. E vimos, também, a estratégia immediate em que as conexões são encerradas e fechadas imediatamente. Ainda, apresentamos a alternativa por meio do utilitário pg_ctl. Por fim, vimos como reiniciar o servidor para o caso de atualização de parâmetros utilizando o reload. Administração do SGBD PostgreSQL https://www.postgresql.org/docs/12/runtime.html 50 Carga de dados no PostgreSQL OBJETIVO: Agora que você já sabe como parar e reiniciar o servidor PostgreSQL, vamos discutir sobre carga de dados no PostgreSQL, que é o nosso próximo passo para tornar o banco de dados mais eficiente e com melhor performance de carga. Sendo assim, ao término deste capítulo, você será capaz de compreender como realizar transações no banco de dados por meio das palavras-chave BEGIN, COMMIT, ROLLBACK e SAVEOPOINT. Também será capaz de carregar dados no PostgreSQL usando o comando copy from, melhorando a performance da carga com a remoção de índices e aumento das variáveis de configuração, e analisando o resultado com o comando analyse. Você sabia que há muitas empresas que possuem sistemas mais complexos e ambientes críticos em que há vários servidores funcionando simultaneamente e não podem parar? Pois é! E realizar um bom manuseio da carga de dados torna-se fundamental para atingir um cenário de sucesso. Principalmente em grandes empresas. E então, motivado(a) para desenvolver essa competência? Vamos nessa! Transações PostgreSQL Os modos de confirmação automática tratam cada comando SQL como se estivessem agrupados em uma única transação. Por padrão, os programas com SQL integrados não estão no modo de confirmação automática e, assim, por meio de palavras-chaves dentro das transações (BEGIN, COMMIT, ROLLBACK e SAVEOPOINT), é possível definir o comportamento de confirmação automática da sessão de banco de dados atual e melhorar o desempenho do servidor. Uma transação é uma unidade lógica de trabalho que contémuma ou mais instruções SQL em que apresenta para todas as instruções somente duas condições: será bem-sucedido para todos ou todas falharão. Administração do SGBD PostgreSQL 51 Caso ocorra alguma falha com uma inserção em algum ponto dentro de uma transação, é possível desfazer a inserção de todas as inserções das linhas anteriores até o ponto do início da transação. Dessa forma, há uma menor preocupação com a carga parcial dos dados e, caso ocorra alguma falha, não afetará o banco de dados. Vejamos as transações na prática: Inicialmente, para melhor compreensão, vamos nos conectar ao database que criamos anteriormente. Lembra-se da sua senha? A conexão segue o mesmo processo. O comando no terminal do SQL shell que instalamos anteriormente para listar os databases existentes no servidor PostgreSQL é \l. Veja na figura 23. Figura 23 – Tabelas atuais Fonte: Elaborado pela autora (2021). Como já estamos conectados ao banco postgres, não é necessário entrar, mas se fosse necessário, o comando seria: \c database_name; Para iniciar um bloco de transações é utilizada a palavra-chave BEGIN e, dessa forma, todas as instruções SQL posteriores ao BEGIN serão executadas dentro de uma única unidade de transação que só considerará o processo da transação como finalizado quando encontrar as palavras-chaves COMMIT ou ROLLBACK. Vejamos o uso do BEGIN da transação na Figura 24. Administração do SGBD PostgreSQL 52 Figura 24 –BEGIN da transação Fonte: Elaborado pela autora (2021). Já a palavra-chave COMMIT salva as alterações no banco de dados. Para você compreender melhor, vamos criar uma tabela e linha no banco de dados permitindo que outros usuários, autorizados, que se conectarem ao banco por meio de outra sessão ou terminal, possam acessar. Vejamos o procedimento na figura 25. Figura 25 – Uso do COMMIT da transação Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 53 Notou algo de diferente no comando? Você percebeu que utilizamos o end transaction? Pois é! Propositalmente, inserimos a palavra-chave end transaction. Perceba que realizou com sucesso. Tal fato é que COMMIT e END TRANSACTION desempenham o mesmo papel, isto é, são iguais. E agora? Você é daquelas pessoas que só acreditam vendo? Pois bem! Para verificar e validar a criação da tabela, você pode abrir um terminal SQL shell (psql) em paralelo e verificar. Para isso, basta se conectar ao postgres novamente e digitar o comando \d. Esse comando lista as tabelas existentes no banco. Veja na figura 26 a tabela chamada teste que criamos no exemplo anterior. Figura 26 – Tabela teste criada no database Fonte: Elaborado pela autora (2021). Você já imaginou se algo ocorreu errado e gostaria de voltar no tempo? Não precisa de poderes especiais. Basta utilizar o ROLLBACK para isso. Legal, não é mesmo? Administração do SGBD PostgreSQL 54 O ROLLBACK faz uma operação de reversão no banco de dados deixando-o no estado conforme a etapa anterior. Sendo assim, podemos dizer que o ROLLBACK mantém a integridade dos dados, ou seja, pode restaurar os dados mesmo após execuções incorretas. Vamos ver um exemplo. Iremos deletar a tabela teste e utilizar o comando rollback e verificar se a tabela ainda consta no banco de dados. Vejamos o procedimento do comando para deletar na figura 27. Figura 27 – Remoção da tabela criada Fonte: Elaborado pela autora (2021). Agora, com o comando \d (lembra-se dele e para que serve?) vamos observar se ainda há a tabela teste no banco. Vejamos na figura 27 a tela de confirmação da tabela removida. Figura 27 – Tela de confirmação da tabela removida Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 55 Após confirmada a remoção da tabela, vamos utilizar o comando ROLLBACK (ver figura 28) e observar que a tabela foi restaurada (ver figura 29). Figura 28 – Comando ROLLBACK Fonte: Elaborado pela autora (2021). Figura 29 – Tela de confirmação da restauração da tabela Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 56 Sendo assim, podemos perceber que a tabela foi retornada mantendo a integridade dos dados, uma vez que a tabela foi removida e voltou ao seu estado atual após o uso do comando ROLLBACK. Contudo, também existe a possibilidade de salvar um ponto de restauração por meio do comando SAVEPOINT, fornecendo a capacidade de reverter a transação até um determinado ponto sem reverter a transação total. Vamos realizar um passo a passo para melhor compreensão: 1. Criar uma tabela e inserir uma linha. Para isso, teremos de iniciar o comando BEGIN. Não esqueça! Vejamos na figura 30. Figura 30 – Criação da tabela e inserção da linha Fonte: Elaborado pela autora (2021). 2. Criar um ponto de restauração com o SAVEPOINT. Veja na figura 31 que foi criado o SAVEPOINT, após esse passo, você vai perceber que qualquer operação que fizermos e chamarmos o ROLLBACK, as operações serão desfeitas até esse ponto. Administração do SGBD PostgreSQL 57 Figura 31 – Criação da tabela e inserção da linha Fonte: Elaborado pela autora (2021). 3. Inserir mais duas linhas na tabela criada. Perceba (ver figura 32) que houve mais duas inserções na tabela. E ao listar o conteúdo da tabela por meio do comando select * from minha_tabela; percebemos os elementos 1, 3 e 2, inseridos. Figura 32 – Criação da tabela e inserção da linha Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 58 4. Disparar o comando ROLLBACK até o ponto de restauração SAVEPOINT (ver figura 33). Figura 33 – ROLLBACK até o ponto de restauração Fonte: Elaborado pela autora (2021). 5. Visualizar a tabela após o ROLLBACK (figura 34). Sendo assim, ao selecionarmos a tabela novamente, podemos notar que a tabela apresenta somente a linha inserida até o SAVEPOINT. Figura 34 – ROLLBACK até o ponto de restauração Fonte: Elaborado pela autora (2021). Administração do SGBD PostgreSQL 59 6. Finalizar com o commit. Você deve notar que o bloco de transações ainda está ativo e que, para finalizar, precisamos disparar o COMMIT ou um segundo ROLLBACK. Figura 35 – ROLLBACK até o ponto de restauração Fonte: Elaborado pela autora (2021). Uso do COPY FROM e ANALYSE O comando COPY FROM realiza uma cópia dos dados de um arquivo para uma tabela. Caso a tabela já contenha dados, os novos dados copiados serão adicionados aos já existentes. Ainda, existem alguns parâmetros que devem ser considerados na especificação do comando COPY FROM, pois, por exemplo, quando é utilizado o STDIN e STDOUT, os dados são transmitidos por meio da conexão entre o cliente e o servidor. Os parâmetros são: nome da tabela, lista de colunas a serem copiadas, nome do caminho absoluto do arquivo, especificação da entrada e saída do aplicativo cliente, armazenamento no formato binário, identificador do objeto (OID), CSV (modo valor separado por vírgula), Force Quote (força a utilização do demarcador em todos os valores diferentes de NULL) e Force not null (processa cada coluna especificada como se estivesse demarcada e, portanto, não sendo um valor NULL). Administração do SGBD PostgreSQL 60 Vejamos um exemplo do uso do COPY e COPY FROM, em que iremos realizar uma cópia de uma tabela (estados) para o cliente, utilizando: no primeiro comando o delimitador de campo da barra vertical e; no segundo comando, o COPY FROM para copiar os dados do arquivo dados_estados para a tabela estados. COPY estados TO STDOUT WITH DELIMITER '|'; COPY estados FROM 'user1/proj/sql/dados_estados'; Dessa forma, sempre que alterar os dados da tabela, isto é, após a alteração da distribuição dos dados no banco de dados, recomenda-se executar o comando ANALYSE (ou VACUUM ANALYSE). Tal comando visa a garantir que o planejador possa ter estatísticas atualizadas sobre a tabela, pois, com estatísticas obsoletas, é possível que tenha um desempenho fraco. Vejamos exemploscom os comandos: 1. Comando VACUUM simples: libera espaço para reutilização VACUUM minha_tabela; 2. Comando VACUUM completo: bloqueia a tabela do banco de dados e recupera mais espaço do que o VACUUM simples. Note que há dois tipos de comando, dependendo da versão do postgres instalada. /* Para Postgres nas versões anteriores ao 9.0: */ VACUUM FULL /* Para Postgres nas versões posteriores ao 9.0: */ VACUUM(FULL) minha_tabela; 3. Full VACUUM and ANALYZE: executa um Full VACUUM e reúne novas estatísticas em caminhos de execução de consulta usando ANALYZE. Note que há dois tipos de comando, dependendo da versão do postgres instalada. Administração do SGBD PostgreSQL 61 /* Para Postgres nas versões anteriores ao 9.0: */ VACUUM FULL ANALYZE minha_tabela; /* Para Postgres nas versões posteriores ao 9.0: */ VACUUM (FULL, ANALYZE) minha_tabela; Ou podemos utilizar somente o comando ANALYSE, em que há a opção de ter ou não o nome da tabela. Sendo que, sem o nome de uma tabela especificada, o comando será executado apenas nas tabelas disponíveis no schema atual ao qual o usuário tem acesso. /* nome da tabela opcional */ ANALYZE VERBOSE minha_tabela; Já para os casos de reconstruir um ou mais índices do banco de dados, substituindo a versão anterior do índice, podemos utilizar o comando REINDEX. O REINDEX pode ser utilizado em vários cenários. De acordo com a documentação do PostgreSQL, há outras funcionalidades do REINDEX, por exemplo: reduzir o consumo de espaço do índice ou reconstruir uma falha em um índice inválido. Para construir o índice sem interferir na produção, você deve descartar o índice e emitir novamente o comando CREATE INDEX CONCURRENTLY. Vejamos alguns exemplos. Vale considerar que qualquer um desses comandos pode ser forçado adicionando a palavra-chave FORCE após o comando: 1. Recriar um índice específico: REINDEX INDEX meuindex 2. Recriar todos os índices de uma tabela: REINDEX TABLE minha_tabela 3. Recriar todos os índices de um schema público: REINDEX SCHEMA public Administração do SGBD PostgreSQL 62 4. Recriar todos os índices do banco de dados postgres: REINDEX DATABASE postgres 5. Recriar todos os índices nos catálogos do sistema no banco de dados postgres: REINDEX SYSTEM postgres SAIBA MAIS: Ficou curioso(a) e quer se aprofundar neste tema? Leia o artigo sobre o maintenance_work_mem. Nele você compreenderá como é controlada a quantidade de memória que o sistema irá alocar. Você pode acessar o conteúdo aqui. RESUMINDO: Chegamos ao fim do nosso capítulo. Gostou do que lhe mostramos? Agora, vamos recapitular tudo o que vimos para ver se o conteúdo foi fixado. Nós falamos sobre como realizar transações no banco de dados por meio das palavras- chaves BEGIN, COMMIT, ROLLBACK e SAVEOPOINT. Agora sabemos que podemos criar um ponto de restauração e, caso ocorra alguma falta, podemos voltar ao estado anterior e garantir a integridade dos dados. Também vimos como utilizar os comandos copy from, como melhorar a performance da carga com a remoção de índices e o aumento das variáveis de configuração, reconstruindo um ou mais índices do banco de dados, substituindo a versão anterior do índice. Por fim, vimos como analisar o resultado com o comando analyse ou VACUUM. Administração do SGBD PostgreSQL http://rhaas.blogspot.com/2019/01/how-much-maintenanceworkmem-do-i-need.html 63 REFERÊNCIAS CARVALHO, V. PostgreSQL: banco de dados para aplicações web modernas. São Paulo: Editora Casa do Código, 2017. FRANCO, G.; VALE, L. (s.d.). A importância e influência do setor de compras nas organizações. TecHoje. Disponível em: http://bit.ly/35gA60Q. Acesso em: 4 jul. 2017. HASS, R. How Much maintenance_work_mem Do I Need?. Robert Hass, 2019. Disponível em: https://bit.ly/3GhiVid. Acesso em: 22 ago. 2020. PostgreSQL. Disponível em: https://tinyurl.com/yy2vj43k. Acesso em: 25 ago. 2020. POSTGRESQL.ORG. PostgreSQL: The World’s Most Advanced Open Source Relational Database. Disponível em: https://www.postgresql.org. Acesso em: 25 ago. 2020. THE POSTGRESQL GLOBAL DEVELOPMENT GROUP. Documentação do PostgreSQL. 2005. Disponível em: http://pgdocptbr.sourceforge.net/. Acesso em: 18 ago. 2020. Administração do SGBD PostgreSQL Banco de dados e índices O banco de dados Conectando ao usuário de conexão do banco de dados no Windows Conectando ao usuário de conexão do banco de dados no Linux O pgAdmin Índices Schemas – tablespaces e gerenciamento de usuários Schemas Tablespaces Gerenciamento de usuários Roles Privilégios Inicialização e interrupção do PostgreSQL Inicialização do PostgreSQL Arquivo postgresql.conf Localização de arquivos Conexões e autenticação SSL Recursos de consumo Atraso de vácuo baseado em custo Relatório e registro de erros Interrupção do PostgreSQL Carga de dados no PostgreSQL Transações PostgreSQL Uso do COPY FROM e ANALYSE
Compartilhar