Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 5: Esquemas
Apresentação
Na aula passada, iniciamos nosso estudo da organização lógica e física do PostgreSQL vendo a organização de seus
diretórios, os tipos de arquivos que os compõem e os databases.
Nesta aula, continuaremos vendo os esquemas, para que servem e como ajudam a organizar os dados dos bancos de
dados.
Iremos, ainda, aprender a criá-los, eliminá-los e alterá-los, tanto através da linha de comando quanto do pgAdmin4.
Objetivos
Criar Esquemas;
Modificar Esquemas;
Eliminar Esquemas.
Esquemas (schemas)
Conforme vimos na aula anterior, um servidor PostgreSQL pode ser dividido em vários bancos de dados (database). Estes, por
sua vez, podem ser divididos em esquemas para facilitar a organização dos dados.
A importância desta possibilidade deriva do fato que, ao realizar uma conexão ao servidor, um cliente do SGBD somente pode
acessar os dados do banco de dados especificado no pedido de conexão. Portanto, a possibilidade de criar esquemas e dividir
os dados entre eles permite que dados de diferentes aspectos possam ser acessados na mesma conexão.
É como se pegássemos um
banco de dados grande e o
dividíssemos em bancos
menores e mais específicos.
Por exemplo, no banco de
dados de uma empresa,
poderíamos ter o esquema
da contabilidade, do setor de
compras, do setor de vendas
etc.
Um banco de dados deve possuir pelo menos um esquema, gerado quando da criação do banco e denominado normalmente
public, podendo possuir vários identificados pelos seus nomes.
Atenção
O esquema public é normalmente criado em um novo banco de dados devido à existência do modelo
padrão template1.
Este esquema não é obrigatório e pode ser eliminado, mas você terá que criar outro esquema no banco de
dados, caso contrário, não conseguirá criar tabelas ou outros objetos.
Os esquemas, por sua vez, possuem objetos de banco de dados como as tabelas, as funções, os tipos de dados etc. O nome
desses objetos deve ser único dentro de um mesmo esquema, mas pode se repetir em esquemas diferentes. Por exemplo, se
temos o esquema vendas e o esquema contabilidade, os dois podem possuir uma tabela cliente, isto não irá gerar nenhum tipo
de conflito.
O mesmo ocorre ao se criar ou referenciar um objeto em um comando Sql. Se não for informado o esquema do mesmo, ele
normalmente é criado ou procurado no esquema public, a não ser que o parâmetro search_path especifique um
comportamento diferente.
Criação de esquema
O comando que criar um esquema é o CREATE SCHEMA.
O nome pode ser qualquer um não existente naquele banco de dados, por exemplo:
Onde:
nome_do_esquema: define o nome do esquema que será criado. Observe que o nome não pode começar por pg_, porque
estes nomes são reservados para os esquemas do sistema.
nome_do_usuário: o nome do usuário que será o dono do esquema. Se for omitido, tem como padrão o usuário que está
executando o comando.
Por exemplo, para criar o esquema aula2_esquema com a tabela aula, o comando seria:
Create Schema aula2_esquema Create Table aula (mat integer, nome varchar(20));
Vamos verificar:
1. O comando funcionou, pois não deu erro, mas obviamente não retornou dados, já que a tabela está vazia.
2. Tivemos que qualificar o nome da tabela, colocando antes o nome do esquema e os separando por um ponto. É a forma
que temos que utilizar para referenciar um objeto de um esquema, pois o comportamento padrão é buscar apenas no
esquema public.
O caminho de procura do
esquema
Conforme você acabou de ver, para podermos acessar um
objeto em um esquema que não seja o public, tivemos que
qualificar o nome da tabela, o que muitas vezes se torna
bastante desagradável de escrever. Como se pode lidar com
isso, então?
Esta solução pode gerar outro problema, pois os dados podem estar na
tabela de um esquema posterior, por isso, o melhor é utilizar nomes únicos
nas tabelas, mesmo em esquemas diferentes.
Denomina-se esquema corrente o primeiro nome no caminho de procura, sendo também o esquema onde as tabelas são
criadas, caso não seja definido o seu esquema no comando de create table.
SHOW search_path;
Onde:
1. $user: determina que o primeiro local a ser procurado é o esquema com o mesmo nome do usuário. Se não existir, passa
para o próximo da lista.
Atenção
O primeiro esquema que for encontrado, entre os listados no caminho de procura, é o local padrão para a
criação dos novos objetos. Por isso, por padrão, eles são criados no public.
Observe o seguinte: Quando você comanda \dt, ele somente lista as tabelas do public, devido ao search_path estar configurado
para $user e public.
E quando você tentar dar um select na tabela aula sem qualificar com o esquema, ele não encontra a tabela.
Note que agora não temos $user, mas o public continua sendo o padrão, pois foi listado primeiro no comando SET search_path
TO public, aula2_esquema;
Se tivéssemos listado aula2_esquema, primeiro ele seria o local de criação padrão para todos os novos objetos do banco de
dados.
Alteração de esquema
Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online
Voce pode alterar o proprietário do esquema ou o seu nome com o comando ALTER SCHEMA, cuja sintaxe é:
Onde:
Note que a tabela aula saiu da listagem de tabelas e deu erro no select. Por que isso ocorreu?
Note que no caminho de procura ainda temos aula2_esquema e não aula3_esquema. O que isso nos mostra?
Que não existe vinculação entre os esquemas listados no caminho de procura e os esquemas existentes no banco de dados.
Se você eliminar um esquema ou renomeá-lo isso não irá se refletir no search_path e você terá que fazer o acerto
manualmente.
Eliminação de esquema
Você pode eliminar um esquema com o comando DROP SCHEMA, cuja sintaxe é:
Onde:
NOME: nome do esquema.
Vejamos um exemplo:
1. Criando esquemas
Para criarmos um esquema no PG_Admin4, devemos clicar com o botão direito em Schemas e selecionar Create schema.
(Fonte: Software PG_Admin4).
Observe que, agora, você tem acesso aos metadados da tabela aula,
suas colunas, constraints etc.
Após esta escolha, aparece a janela da figura a seguir, onde devemos escolher o Owner e o nome do esquema na aba general.
Para ver os objetos existentes no esquema, basta clicar no > antes do nome do esquema.
(Fonte: Software PG_Admin4).
Clicando em Tables, você notará que não irá aparecer nada, pois não existem tabelas neste esquema. Vamos criar uma para
isso. Clique com o botão direito em Tables e escolha Create table
Aparece, então, a janela de criação, onde, na aba General , você deve digitar o nome da tabela
2. Alterando esquemas
Para alterar o nome ou proprietário de um esquema utilizando a interface gráfica você deve selecionar Properties no menu de
contexto que aparece ao se clicar com o botão direito no nome do esquema.
(Fonte: Software PG_Admin4).
Aparece, então, a janela de propriedades, onde, na aba General, você pode escolher o novo nome ou o novo proprietário. No
caso, estamos mudando o nome de aula_esquema para aula1_esquema:
3. Eliminando esquemas
Para eliminar um esquema utilizando a interface gráfica, você deve selecionar Delete/Drop no menu de contexto que aparece
ao se clicar com o botão direito no nome do esquema:
(Fonte: Software PG_Admin4).
Atenção
Caso você tente fazer o mesmo procedimento em aula2_esquema, ao fazer a confirmação, ocorrerá o
seguinte erro:
No caso da tabela aula, temos dois caminhos, então primeiro dropar a tabela ou, então, escolher DROP CASCADE no menu:
Modelos de utilização
A grande utilização dos esquemas é permitir uma melhor organização dos dados do banco de dados, facilitando, assim, sua
gerência e consulta.
Existem alguns modelos que podemos utilizar para a criação de esquemas. Vamos a eles:
Implica em não se criar nenhum outro esquema, todos os usuários acessam apenas o public. É recomendado,
particularmente, quando apenas um usuário ou poucos usuários colaborativos existem no banco de dados.
É criado um esquema para cada usuário do banco de dados com o seu nome. Particularmente útil para usuários de
aplicação que acessam apenas os seus dados. Como o caminho de busca começa com $user, cada um acessará e
manipulará seus dados no próprio esquema por padrão. Neste caso, deve ser revogado o acesso ao public ou, melhor
ainda, remover este esquema.
Quando existem objetos compartilhados entre várias aplicações (tabelas, funções etc.), estes devem ser colocados em
esquemas próprios. Devem também ser concedidos privilégios de acesso aos usuários que irão utilizá-los. Dessa forma,
eles poderão referenciá-los através da qualificação de seus nomes com o nome do esquema ou estes esquemas podem
ser incluídos no caminho de busca.
Atividade
1. Acessando o SGBD criado na AWS, crie um esquema chamado atividade1 e confirme a sua criação.
2. Na linha de comando, altere o nome do esquema criado na atividade1 para atividade2 e confirme a alteração.
Notas
Referências
CAIUT, F. Administração de Banco de Dados. 1. ed. RNP, 2015. E-book. Disponível em:
https://pt.scribd.com/doc/272727573/Administracao-de-Banco-de-Dados. Acesso em: 14 jan. 2020.
Próxima aula
Explore mais
Em caso de dúvidas, converse com seu professor on-line por meio dos recursos disponíveis no ambiente de
aprendizagem.