Você está na página 1de 24

MODELO DE TEMPLATE DE AULA

Disciplina: ADMINISTRAÇÃO DE BANCO DE DADOS I


Aula 04: Organização Lógica e Física de Banco de Dados

Apresentação
Para poder funcionar o PostGreSql armazena suas informações em seu diretório de
dados, que pode ser definido através da variável de ambiente pgdata.
Além disso organiza seus dados em base de dados (database) que servem de
contêiner para todos os objetos de um banco de dados.
Nesta aula iremos estudar exatamente estes elementos.

Objetivos

Objetivo 1 – Conhecer a organização dos diretórios do PostGreSql


Objetivo 2 – Criar Database
Objetivo 3 – Eliminar Databases

1
Conteúdo online

1. Estrutura de diretórios e arquivos do PostgreSQL


Os dados do Postgresql ficam armazenados na área de dados, definida pela variável
de ambiente pgdata.
Caixa de Atenção
Tanto os arquivos do banco de dados como os de log podem ser armazenados em
outros locais a partir do uso de tablesapaces e link simbólicos.
Já os arquivos de log de erros e de configuração de segurança podem ser
armazenados fora do pgdata a partir de parâmetros do postgresql.conf
Fim caixa de atenção

A estrutura do PGDATA em um instalação Windows é mostrada na figura 1

2
Fig1 Estrutura do PGdata

Vejamos com mais detalhes os diretórios mais importante dentro do PGdata.


1.1. base.
Neste diretório é onde ficam armazenadas as bases de dados, existindo um
diretório para cada base de dados.
Na instalação inicial teremos 3 bases, a postgres, a template0 e a template1
(fig2)

3
Fig 2 Subdiretórios de Base

O nome dos subdiretórios corresponde ao OID da base que pode ser obtido ao
se fazer uma consulta ao catálogo (Fig3) com o comando
SELECT oid, datname FROM pg_database;

Fig3 OID das bases de dados


No diretório das bases temos os arquivos das tabelas e dos índices, bem como
arquivos auxiliares.
Inicialmente cada tabela ou índice corresponderá a um arquivo cujo tamanho
máximo é de 1 GB. Isto não limita o tamanho da base de dados, já que quando
o arquivo ultrapassa este tamanho a tabela ou índice recebe mais um arquivo.
Este processo é repetido toda vez que um arquivo atinge o tamanho máximo.

Existem ainda no diretório arquivos com os seguintes sufixos :


 _fsm: para o Free Space Map, indicando onde há espaço livre nas
páginas das tabelas;
 _vm: para o Visibility Map, que indica as páginas que não precisam
passar por vacuum;
 _init: para tabelas que não geram log;

4
 arquivos temporários: com nome no o formato tNNN_filenode, sendo
que o PID do processo que o está usando corresponde ao NNN.

Fig 4 Arquivos no subdiretório de uma base de dados.


1.2. global.
O diretório global contém os dados das tabelas com visibilidade em todo o cluster
como as do catálogo

1.3. pg_xlog.
Contem os arquivos de controle de transação e do Log do sistema, o WAL.
Os arquivos deste diretório possuem as seguintes características:
 16 MB é o tamanho de cada um;
 O seu nome é composto per um número hexadecimal
 Os arquivos são reciclados após cada checkpoint os arquivos são reciclados
1.4. pg_log.
Neste diretórios são armazenados os log de erros

1.5. pg_tblspc.
Contem os links simbólicos para a localização real das tablespaces

1.6. diretórios de controle de transação.


São vários diretórios utilizados para o controle de transação dentre os quais temos:
 pgdata/pg_clog;
 pgdata/pg_serial;

5
 pgdata/pg_multixact;
 pgdata/pg_subtrans;
 pgdata/pg_twophase.

2. BASES DE DADOS (DATABASE)


Um cluster do Postgresql gerencia uma ou mais bases de dados.
Cada base de dados é composta de objetos como tabelas, índices, etc. se
constituindo no nível mais alto da hierarquia lógica do servidor.
Cada banco de dados é uma coleção de esquemas e estes contem os objetos,
portanto a hierárquica completa é
Servidor -> Base de Dados -> Esquema -> Objetos
Quando um usuário deseja fazer conexão ele deve especificar a base de dados que
deseja acessar.
Caixa de Atenção
Não é possível acessar mais de uma base de dados na mesma conexão, mas uma
aplicação ou cliente pode fazer várias conexão em paralelo para a mesma base ou
bases diferentes.
Fim caixa de atenção
Como vimos cada base de dados fica fisicamente separada em seu diretório e o
controle de acesso é gerenciado ao nível da cada conexão.
Se existe necessidade de acessar dados inter-relacionados eles devem ser
colocados no mesmo banco, podendo ser colocados em esquemas diferentes. Os
esquemas existem apenas em nível lógico não em nível físico e o acesso é
controlado pelo sistema de privilégios.

e o para eliminar base de dados DROP DATABASE


2.1. CREATE DATABASE

O comando para criar base de dados é o CREATE DATABASE cuja sintaxe é

CREATE DATABASE nome

6
[ [ WITH ] [ OWNER [=] dono_do_banco_de_dados ]
[ TEMPLATE [=] modelo ]
[ ENCODING [=] codificação ]
[ TABLESPACE [=] espaço_de_tabelas ] ]
Onde:

 Nome - é o nome da base a ser criada

 Owner – nome do usuário que será o dono do banco de dados, se


omitido o default será assumir como owner o usuário que executou o
comando

 Modelo - nome do banco de dados de modelo a ser usado na criação, o


default é utilizar o template1

 Codificação – conjunto de caracteres a ser utilizado no novo banco de


dados. Se omitido será utilizada a codificação padrão do cluster.

 espaço_de_tabelas - nome da tablespace a ser associado ao banco de


dados. Se omitido o default será utilizar o espaço de tabelas do banco
modelo
Caixa de Atenção
A criação de banco de dados somente pode ser realizada por um superusuário
ou por usuários que receberam permissões especificas para esta atividade.
Estas concessões serão vistas posteriormente nesta disciplina.
Fim caixa de atenção
Vejamos um exemplo
Vamos criar um banco de dados chamado aula , logado como um superusuário
voce deve dar o comando:
Create database aula;

Voce pode verificar se o banco de dados foi criado utilizando o comando


SELECT oid, datname FROM pg_database;

7
Além disso foi criado o subdiretório 16408 na diretório base ( fig5)

Fig5 Diretório Base

2.2. ALTER DATABASE

O comando ALTER DATABASE permite alterar os atributos de uma base de


dados
Sintaxe:

 Para alterar configurações da sessão de variáveis de tempo de


execução
ALTER DATABASE nome SET parâmetro { TO | = } { valor | DEFAULT }
ALTER DATABASE nome RESET parâmetro
Esta alterações irão valer apenas para a sessão onde o comando foi emitido.
Se novas sessões foram iniciadas o banco retorna para a configuração padrão

 Para alterar o nome do banco de dados


ALTER DATABASE nome RENAME TO novo_nome

 Para alterar o proprietário do banco de dados


ALTER DATABASE nome OWNER TO novo_dono

Vejamos um exemplo vamos criar um database chamado aula2


Create database aula2;

8
Vamos verificar sua criação
SELECT oid, datname FROM pg_database;

Note que o OID do database é 16412 tendo sido criado um subdiretório com
este nome no diretório base

Vamos agora alter o nome do banco de dados para aula3


ALTER DATABASE aula2 RENAME TO aula3;

Vamos confirmar a alteração


SELECT oid, datname FROM pg_database;

9
Note que apesar de ter mudado de nome o OID do banco continua sendo
16412, ou seja, o mesmo que correspondia a aula2 e o subdiretório em base
continua sendo o mesmo

2.3. DROP DATABASE


O comando DROP DATABASE remove um banco de dados.
Remover um banco de dados implica em apagar as entradas do banco no
catalogo do sistema e remover o subdiretório com os dados no diretório base.
Somente um superusuário ou o dono do banco pode executar este comando.
Caixa de atenção
Se existir alguma conexão ativa no banco de dados ele não poderá ser
apagado.
Desta forma para que voce possa apaga-lo deve estar conectado a outro banco
do cluster.
Fim caixa de atenção

Sintaxe:
DROP DATABASE nome
Vejamos um exemplo:
Vamos apagar o banco de dados aula.
Conectado em outro banco de dados emita o comando
Drop database aula;

10
Após eliminar a base de dados voce poderá confirmar que o banco não consta
mais no catálogo com o comando:
SELECT oid, datname FROM pg_database;

E pode também verificar que o subdiretório 16408 foi apagado

Fig6 Diretório Base

3. Bancos de dado modelo

O Comando CREATE DATABASE funciona faz uma cópia de um banco de


dados existente para o novo.
Esta cópia implica em criar no novo banco os objetos básicos com modelo
como esquemas, tabelas de catalogo, linguagem suportada etc
O banco padrão utilizado como modelo é o template1, desta forma se você
criar neste banco um objeto como um esquema ou uma tabela quando um
novo banco for criado ele também terá este objeto. Isto permite que cada
instalação do SGBD seja personalizada, atendendo a necessidades
específicas.
Por exemplo no PostgreSql as linguagens procedurais para estarem
disponíveis para criação de funções devem ser instaladas na base de dados,
se voce instalar por exemplo o PL/pgsql em template1, ela será
automaticamente instalada em todos nos novos bancos criados, sem que tenha
que ser realizada qualquer operação adicional.

11
Existe no cluster também o template0, um segundo banco modelo.
Inicialmente este banco possui os mesmo objetos de template1, ou seja
aqueles pré-definidos pela instalação do servidor. Este banco nunca deve ser
modificado após a instalação ou execução do initdb, dependo de como o SGBD
foi instalado.
Se voce desejar criar um novo banco apenas com os elementos padrão, sem
as alterações realizadas em template1 no comando CREATE DATABASE deve
especificar que o modelo a ser utilizado é o template0. O comando para isso
seria :
CREATE DATABASE nome_do_banco_de_dados TEMPLATE template0;
Caixa de Atenção
Isto é particularmente útil quando você por exemplo está realizando a
restauração de uma cópia de segurança de um banco de dados feita com
pg_dump
Este procedimento evita eventuais conflitos entre a cópia de segurança e
adições que foram realizadas em template1
Fim caixa de atenção
Podem ser criados bancos de modelos adicionais, na realidade, qualquer
banco pode ser usado como modelo para outro , basta especifica-lo no
parâmetro TEMPLATE de CREATE DATABASE.
Isto não dever ser entendido como um forma de copiar uma base de dados
para outra. O banco utilizado como modelo deve esta inativo, ou seja, nenhum
usuário pode estar conectado a ele. O ideal é que o banco utilizado como
modelo seja somente de leitura e não sofra alterações.
Em pg_database existem duas colunas que indicam se o banco se destina a
servir de modelo (datistemplate) e se podem ser realizadas novas conexões
no banco de dados (datallowconn).
O Comando que nos mostrará estas informações é:
select oid, datname,datistemplate,datallowconn from pg_database;

12
Analisando o retorno você pode reparar que a base postgres este com F (false)
em datistemplete , portanto não deve ser usada como modelo enquanto as
outras duas estão com T (true) e portanto podem ser utilizadas.
Já na coluna datallowconn a única base com F(false) é template0, isso é feito
para evitar que ele sofra modificações.
Após preparar um modelo ou fazer alguma alteração em template1 você deve
executar o comando VACUUM FREEZE ou VACUUM FULL FREEZE nesta
base de dados. Ao se fazer isso garante-se que todas as linhas do banco de
dados serão congeladas e manterão sua consistência em relação aos ID de
transação.
Link VACUUM
Posteriormente na disciplina veremos para que serve o comando VACUUM e
suas implicações.
Fim LINK VACUUM
Caixa de Atenção
template1 e template0 são bancos de dados como outros quaisquer, não tendo
nenhum status especial além do fato do nome template1 ser o default o modelo
no comando CREATE DATABASE,
Fim Caixa de Atenção

4. PGADMIN4
Podemos gerenciar nossa bases de dados utilizando o PGAdmin4
A figura 7 mostra a estrutura de arvore da ferramenta

FIG7 Estrutura de Arvore do PgAdmin

Nesta Estrutura podemos notar dentro de PostGreSql 12, que é o cluster criado pela
instalação as entradas Database, LoginGroup Roles e Tablespaces

Ao abrir database voce encontrará a estrutura da fig 8

13
FIG8 Estrutura de Arvore do PgAdmin

Onde podemos notar os seguintes elementos:


 Casts – mostrar a relação de regras de convervão de dados criadas no
banco de dados
 Catalogs -mostra as tabelas e visões que compõem o catalogo do banco
de dados

 Event Triggers -mostra os gatilhos criados no banco de dados


 Extensions – mostra as extensões instaladas no banco de dados

 Foreing Data Wrappers – mostra as fontes de dados externa que podem


ser utilizadas pelo banco de dados
 Languages – mostra as linguagens procedurais instaladas no banco de
dados

 Schemas – mostra os esquemas existente no banco de dados. Todo


banco tem pelo menos o esquema public.

4.1. Criando um Database


Para criar um banco de dados realize os seguintes passos:

14
a. Clique com o botão direito em database e selecione Create Database

b. Na janela aberta na aba general defina o nome do banco

c. A seguir na aba definition escolhe o valor para os diversos parâmetros de


criação

15
d. A aba SQL mostra o comando que será executado, basta então clicar em
save

16
e. Uma vez criada a base ela aparece na arvore de administração

4.2. Eliminando um Database


a. Para eliminar um database clique com o botão direito no seu nome e escolha
DROP

17
b. O servidor solicitará confirmação, clique em OK e o database será eliminado.

c. O database desaparecerá da arvore de administração

Atividades

Atividade 1: Utilizando a linha de comando crie um database chamados atividade1 e


confirme sua criação

Gabarito comentado

18
O comando ser utilizado é:
Create Database atividade1;

Para confirmar a criação acesse o catalogo do sistema


Select oid, datname from pg_databases;

Atividade2: Utilizando a linha de comando elimine o database atividade1 e confirme


sua eliminação

Gabarito Comentado:
O comando ser utilizado é:
Drop Database atividade1;

Para confirmar a eliminação acesse o catalogo do sistema


Select oid, datname from pg_databases;

19
Atividade3: Utilizando o PGADMIN crie o database atividade 3 com codificação
win1252 e utilizando como modelo o template0
Confirme a criação do banco

Gabarito Comentado:
a. Clique com o botão direito em database e selecione Create Database

b. Na janela aberta na aba general defina o nome do banco

20
c. A seguir na aba definition escolhe o valor para os diversos parâmetros de
criação

d. Clique em save para criar o banco

e. Para confirmar a criação verifique a árvore de administração

21
Atividade 4: Utilizando o PGADIMIN elimine a base de dados atividade3 e confirme
sua eliminação

Gabarito Comentado:

a. Para eliminar um database clique com o botão direito no seu nome e escolha
DROP

b. O servidor solicitará confirmação, clique em OK e o database será eliminado.

22
c. O database desaparecerá da arvore de administração

Referências
Manual do PostGreSql
Santos E. V. Administração do PostGreSql 1ª.Ed 2017
Caiut F – Administração de Banco de Dados 1ª.Ed 2015
Próximos passos

Na próxima aula continuaremos estudando a organização física e lógica do servidor


do postgresql.

Explore +

Acesse o site do projeto do postgresql


https://www.postgresql.org/

Documentação oficial do SGBD


https://www.postgresql.org/docs/

23
Documentação oficial do PGAdmin4
https://www.pgadmin.org/docs/pgadmin4/development/

Livro PostGreSql
https://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico

Livro Administração de PostGreSql


https://pt.scribd.com/doc/272727573/Administracao-de-Banco-de-Dados

24

Você também pode gostar