Você está na página 1de 25

MODELO DE TEMPLATE DE AULA

Disciplina: ADMINISTRAÇÃO DE BANCO DE DADOS I


Aula 05: 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 cria-los, eliminá-los e alterá-los tanto através da
linha de comando quanto do PgAdmin4.

Objetivos

Objetivo 1 – Criar Esquemas


Objetivo 2 – Alterar Esquemas
Objetivo 3 – Eliminar Esquemas

1
Conteúdo online

1. 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 apenas 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 diferente aspectos
possam ser acessados na mesma conexão. É como se pegássemos banco de
dados grande e o dividíssemos em banco 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.
Caixa de Atenção
O esquema public é normalmente criado em um novo banco de dados devido a
existir 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 senão não conseguira criar tabelas ou outros objetos
Fim Caixa de Atenção

Os esquemas por sua vez possuem objetos de banco de dados como as tabelas, as
funções, os tipos de dados etc. O nome destes 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 um
tabela cliente, isto não irá gerar nenhum tipo de conflito. O mesmo ocorre
Caixa de Atenção

2
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 especificar um comportamento diferente.
Fim Caixa de Atenção

Observe ainda que o nome do esquema é único dentro de um banco de dados, mas
pode se repetir em banco diferentes

2. 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 do comando Create Schema

Sua sintaxe é:

3
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 a tabela foi?


Vamos verificar
Select * from aula2_esquema.aula;

Note dois aspectos:

4
- O comando funcionou pois não deu erro mas obviamente não retornou dados pois
a tabelas está vazia
- 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.

3. O caminho de procura do esquema


Conforme voce 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 muito 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, desta forma podemos utilizar apenas o nome da mesma, sem o
qualificar.
Mas então voce pode questionar: Como podem existir tabelas de mesmo nome em
esquema diferentes, como ele lida com isso?
Bom é muito simples o caminho de procura é estabelecida uma ordem de busca nos
esquemas, ao se encontra 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 e sistema retorna um erro.
Caixa de Atenção
Este solução pode gerar outro problema pois os dados podem estar na tabela de um
esquema posterior, por isso o melhor é utilizar nomes únicos na tabelas, mesmo em
esquema diferentes.
Fim Caixa de Atenção
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;

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

Onde:
$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
Public - determina que deve ser procurado no public..

Caixa de 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.
Fim Caixa de Atenção

Observe o seguinte quando voce comanda \dt ele somente lista as tabelas do public
devido ao search_path estar configurado para $user e public.

E quando voce 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;

6
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 comando \dt e Select a tabela aula seria encontrada

4. Alteração de esquema
Voce pode alterar o proprietário do esquema ou o seu nome com o comando ALTER
SCHEMA

Cuja Sintase é:
ALTER SCHEMA nome RENAME TO novo_nome
ALTER SCHEMA nome OWNER TO novo_dono

7
Onde:

- nome - nome de um esquema existente.


- novo_nome - novo nome do esquema.
- novo_dono - novo dono do esquema.

Vamos alterar o nome do Esquema aula2_esquema para aula3_esquema

Será que ainda conseguimos acessar a tabela aula ?

Note que tabela aula saiu da listagem de tabelas e deu erro no select.
Porque 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 voce eliminar um esquema ou o
renomear isso não irá se refletir que no search_path e voce terá que fazer o acerto
manualmente.

5. Eliminação de esquema
Voce pode eliminar um esquema com o comando DROP SCHEMA

8
Cuja Sintase é:

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


Parâmetros
- 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 esquema no banco de dados:

Vamos apagar o aula_esquema


DROP SCHEMA aula_esquema;

Funcionou, vamos fazer a mesma coisa com o aula3_esquema

DROP SCHEMA aula3_esquema;

Porque 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

9
DROP SCHEMA aula3_esquema CASCADE;

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

6. Gerenciando Esquemas no PG_Admin4


O Pg_Admin4 nos permite gerenciar os esquemas de um banco de dados.
O esquema existentes aparecem na estrutura de arvore do banco de dados (Fig1)

10
Fig1 Esquemas no PG_Admin4
Na figura vemos que existe apenas o esquema public.

6.1. Criando Esquemas


Para criarmos um esquema no PG_Admin4 devemos clicar com o botão direito em
schemas e selecionar create schema (Fig2)

Fig2 Esquemas no PG_Admin4

Após esta escolha aparece a janela da fig3 onde devemos escolher o owner e o
nome do esquema na aba general

11
Fig3 Criando Esquemas no PG_Admin4

A aba Sql mostra o comando que será executado (Fig 4)

Fig4 Criando Esquemas no PG_Admin4

A seguir basta clicar em Save para que esquema seja criado(Fig5).

12
Fig5 Criando Esquemas no PG_Admin4

Após isso o esquema será criado e a lista de esquemas atualizada (Fig6)

Fig6 Esquemas no PG_Admin4

Aproveite e crie mais um esquema denominado aula2_esquema e confirme a


criação

Fig7 Esquemas no PG_Admin4

Para ver os objetos existentes no esquema basta clicar no > antes no nome do
esquema (Fig8)

13
Fig8 Esquemas no PG_Admin4

A figura8 mostra os tipos de objetos que podemos ter em um esquema.


Clicando em tables voce notará que não ira aparecer nada pois não existem tabelas
neste esquema, vamos criar uma para isso clique com o botão direito e tables e
escolha create table ( fig9)

Fig9 Criando Tabelas no Esquema

Aparece então a janela de criação onde na aba general voce de digitar o nome da
tabela (Fig 10)

14
Fig10 Criando Tabelas no Esquema

A seguir na aba columns voce deve definir as colunas da tabela clicando no + (fig11)

Fig11 Criando Tabelas no Esquema

15
A aba Sql mostra o comando que será executado (Fig 12)

Fig12 Criando Tabelas no Esquema

A seguir basta clicar em Save para que a tabela seja criada(Fig13).

Fig13 Criando Tabelas no Esquema

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


(Fig14)

16
Fig14 Esquemas no PG_Admin4

Observe que agora voce tem acesso aos metadados da tabela aula, suas colunas,
constraints, etc.

6.2. Alterando Esquemas


Para alterar o nome ou proprietário de um esquema utilizando a interface gráfica
voce deve selecionar properties no menu de contexto que aparece ao se clicar com
o botão direito no nome do esquema

Fig15 Esquemas no PG_Admin4

17
Aparece então a janela de propriedades onde na aba general voce pode escolher o
novo nome ou o novo proprietário, no caso estamos mudando o nome de
aula_esquema para aula1_esquema (Fig16)

Fig16 Esquemas no PG_Admin4

A seguir basta clicar em Save e o nome do esquema será alterado (Fig17)

Fig17 Esquemas no PG_Admin4

6.3. Eliminando Esquemas


Para eliminar um esquema utilizando a interface gráfica voce deve selecionar
delete/drop no menu de contexto que aparece ao se clicar com o botão direito no
nome do esquema (fig18)

18
Fig18 Esquemas no PG_Admin4

O SGBD pede confirmação, clique em OK

Fig19 Esquemas no PG_Admin4

E o esquema será eliminado

Fig20 Esquemas no PG_Admin4

Porém se voce tentar fazer a mesma coisa em aula2_esquema ao clicar em ok na


caixa de confirmação ocorrerá um erro (Fig21)

19
Fig21 Esquemas no PG_Admin4

O erro ocorre porque em esquema dois temos objetos, no caso a tabela aula, temos
dois caminhos então primeiro dropar a tabela ou então escolher DROP CASCADE
no menu (Fig22)

Fig22 Esquemas no PG_Admin4

Aparece novamente o pedido de confirmação

Fig23 Esquemas no PG_Admin4

E ao clicar em OK o esquema é elimininado.

20
Fig23 Esquemas no PG_Admin4

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

• 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 caminha de busca começa com $user
cada uma 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 se
colocados em esquemas próprios. Devem também ser concedidos privilégios de
acesso aos usuários que iram utiliza-los, desta forma eles poderão referencia-los
através da qualificação de seus nomes com o nome do esquema ou estes esquema
podem ser incluídos no caminho de busca.

21
Atividades

Atividade 1:
Acessando o SGBD criado na aws crie um esquema chamado atividade 1 e confirme
a sua criação

Gabarito comentado
Voce deve logar como superusuario do banco de dados e dar o comando
Create schema atividade1 ;

Para confirmar a criação use \dn

Atividade2:
Na linha de comando altere o nome do esquema criado na atividade 1 para
atividade2 e confirme a alteração.

Gabarito Comentado:
Para alter o nome é necessário como superusuario dar o comando:
ALTER SCHEMA atividade1 RENAME TO atividade2;

22
Para confirmar a criação use \dn

Atividade3: Elimine o esquema atividade 2 e confirma a sua eliminação

Gabarito Comentado:
Para eliminar a role é necessário como superusuario dar o comando
DROP SCHEMA atividade2

Para confirmar a criação use \dn

23
Atividade 4: Utilizando o PGAdmin crie o esquema atividade4 e confirme a sua
criação

Gabarito Comentado:
Para realizar o pedido os passos são os seguintes:

1. Escolher Create Schema

2. Definir o nome do esquema

3. Clicar em SAVE

24
4-Para confirmar a criação basta ver a lista de schemas

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 veremos os espaços de tabelas e o catálogo do sistema

Explore +

Acesse o site do projeto do postgresql


https://www.postgresql.org/

Documentação oficial do SGBD


https://www.postgresql.org/docs/
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

25

Você também pode gostar