Você está na página 1de 20

Administração de Banco de Dados I

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.

Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online

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.

 (Fonte: Clker-Free-Vector-Images / Pixabay).

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.

Neste esquema, qualquer usuário pode acessar e criar objetos.

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.

O nome do esquema é único dentro de um banco de dados, mas pode


se repetir em bancos diferentes.

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:

CREATE SCHEMA aula_esquema;

Para ver os esquemas existentes, comande \dn

Observe que, além do public, temos o esquema aula_esquema.

Vamos estudar melhor o comando Create Schema, cuja sintaxe é:


CREATE SCHEMA nome_do_esquema [ AUTHORIZATION nome_do_usuário ] [ elemento_do_esquema [ ... ] ]

CREATE SCHEMA AUTHORIZATION nome_do_usuário [ elemento_do_esquema [ ... ] ]

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.

elemento_do_esquema: um comando SQL definindo um objeto a ser criado no esquema.

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));

O esquema foi criado, mas e a tabela?

Vamos verificar:

Select * from aula2_esquema.aula;

Note dois aspectos:

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?

No PostgreSQL do caminho de procura (search_path), que


minimiza este problema. O caminho de procura especifica
os esquemas que devem ser percorridos na busca pela
tabela. Assim, podemos utilizar apenas o nome da mesma,
sem o qualificar.

Mas, então, você pode questionar: Como podem existir


tabelas de mesmo nome em esquemas diferentes, como ele
lida com isso?

Bem, é muito simples: No caminho de procura é


estabelecida uma ordem de busca nos esquemas. Ao se  (Fonte: Nonnakrit / Shutterstock).
encontrar a primeira tabela com o nome procurado, ele
retorna os dados e para a busca. Se não existir nenhuma
tabela com aquele nome no caminho de procura, o sistema
retorna um erro.

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.

O comando que mostra o caminho de procura corrente é:

SHOW search_path;

Na configuração padrão, este comando retorna:

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.

2. Public: determina que deve ser procurado no public.

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.

Vamos, então, alterar o caminho de procura para incluir o aula2_esquema

SET search_path TO public, aula2_esquema;

Vamos verificar o caminho de procura:

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.

Agora, se repetirmos os comandos \dt e Select, a tabela aula seria encontrada.

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 é:

ALTER SCHEMA nome RENAME TO novo_nome

ALTER SCHEMA nome OWNER TO novo_dono

Onde:

nome: nome de um esquema existente.

novo_nome: novo nome do esquema.

novo_dono: novo dono do esquema.

Agora vamos alterar o nome do Esquema aula2_esquema para aula3_esquema.

Será que ainda conseguimos acessar a tabela aula?

Note que a tabela aula saiu da listagem de tabelas e deu erro no select. Por que isso ocorreu?

Vamos ver o caminho de procura:

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 é:

DROP SCHEMA nome [, ...] [ CASCADE | RESTRICT ]

Onde:
NOME: nome do esquema.

CASCADE: apaga automaticamente os objetos do esquema.

RESTRICT: não apaga o esquema se ele contiver algum objeto. É o padrão.

Vejamos um exemplo:

Temos atualmente 3 esquemas no banco de dados.

Note que o servidor informou que apagou a tabela também.

Vamos apagar o aula_esquema:

DROP SCHEMA aula_esquema;

Funcionou, vamos fazer a mesma coisa com o aula3_esquema:

DROP SCHEMA aula3_esquema;

Por que agora não funcionou?

Porque em aula3_esquema temos a tabela AULA, lembra?

O próprio servidor nos sugere o que fazer: Usar CASCADE no comando.

DROP SCHEMA aula3_esquema CASCADE;


Gerenciando esquemas no PG_Admin4
O PG_Admin4 nos permite gerenciar os esquemas de um banco de dados.

Os esquemas existentes aparecem na estrutura de árvore do banco de dados, vejamos:

 (Fonte: Software PG_Admin4).

Na figura, vemos que existe apenas o esquema public.

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.

 (Fonte: Software PG_Admin4).

A aba Sql mostra o comando que será executado.

 (Fonte: Software PG_Admin4).


A seguir, basta clicar em Save para que o esquema seja criado.

 (Fonte: Software PG_Admin4).

Após isso, o esquema será criado e a lista de esquemas atualizada.

 (Fonte: Software PG_Admin4).

Aproveite e crie mais um esquema denominado aula2_esquema e confirme a criação.

 (Fonte: Software PG_Admin4).

Para ver os objetos existentes no esquema, basta clicar no > antes do nome do esquema.
 (Fonte: Software PG_Admin4).

Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online

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

 (Fonte: Software PG_Admin4).

Aparece, então, a janela de criação, onde, na aba General , você deve digitar o nome da tabela

 (Fonte: Software PG_Admin4).

A seguir, na aba Columns, você deve definir as colunas da tabela clicando no +.

 (Fonte: Software PG_Admin4).


A aba Sql mostra o comando que será executado.

 (Fonte: Software PG_Admin4).

A seguir, basta clicar em Save para que a tabela seja criada.

Após isso, a tabela esquema será criada e as informações do esquema atualizadas

 (Fonte: Software PG_Admin4).

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:

 (Fonte: Software PG_Admin4).

A seguir, basta clicar em Save e o nome do esquema será alterado:

 (Fonte: Software PG_Admin4).

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).

O SGBD irá pedir confirmação. Clique em OK:

 (Fonte: Software PG_Admin4).

Em seguida, esquema será eliminado:

 (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:

 (Fonte: Software PG_Admin4).

O erro ocorre porque em esquema dois temos objetos.

No caso da tabela aula, temos dois caminhos, então primeiro dropar a tabela ou, então, escolher DROP CASCADE no menu:

 (Fonte: Software PG_Admin4).

Aparece novamente o pedido de confirmação:

 (Fonte: Software PG_Admin4).

E, ao clicar em OK, o esquema é eliminado.

 (Fonte: Software PG_Admin4).

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:

Clique nos botões para ver as informações.

Usar apenas o esquema public 

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.

Criar um esquema para cada usuário 

É 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.

Criar esquemas para objetos compartilhados 

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.

3. Elimine o esquema atividade2 e confirme a sua eliminação.

4. Utilizando o pgAdmin, crie o esquema atividade4 e confirme a sua criaçã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.

MANUAL DO POSTGRESQL. Disponível em: https://www.postgresql.org/docs/manuals/. Acesso em: 14 jan. 2020.

SANTOS, E. V. Administração do PostgreSQL. 1. ed. 2017. E-book.

Próxima aula

Os espaços de tabelas e o catálogo do sistema.

Explore mais

Pesquise na internet sites, vídeos e artigos relacionados ao conteúdo visto.

Em caso de dúvidas, converse com seu professor on-line por meio dos recursos disponíveis no ambiente de
aprendizagem.

Você também pode gostar