CREATE SCHEMA — define um novo esquema
CREATE SCHEMAnome_do_esquema[ AUTHORIZATIONusuário] [objeto_do_esquema[ ... ] ] CREATE SCHEMA AUTHORIZATIONusuário[objeto_do_esquema[ ... ] ] CREATE SCHEMA IF NOT EXISTSnome_do_esquema[ AUTHORIZATIONusuário] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONusuárioondeusuáriopode ser:nome_do_usuário| CURRENT_ROLE | CURRENT_USER | SESSION_USER
Figura 3. Estrutura lógica hierárquica do PostgreSQL
O comando CREATE SCHEMA define um novo esquema
no banco de dados corrente
[137]
[138].
O nome do esquema deve ser diferente do nome de qualquer esquema
existente no banco de dados corrente.
Um esquema é essencialmente um espaço de nomes: contém objetos
com nome (tabelas, tipos de dados, funções, e operadores),
cujos nomes podem duplicar aqueles de outros objetos existentes
em outros esquemas.
Os objetos são acessados “qualificando” seus nomes com
o nome do esquema como prefixo, ou definindo um caminho de procura
que inclua o(s) esquema(s) desejado(s).
Um comando CREATE especificando um nome de objeto
não qualificado pelo nome do esquema, cria o objeto no esquema corrente
(aquele na frente no caminho de procura, que pode ser determinado
usando a função current_schema).
Como opção, o comando CREATE SCHEMA pode incluir
subcomandos para criar objetos dentro do novo esquema.
Estes subcomandos são tratados essencialmente da mesma forma que os
comandos executados em separado após a criação do esquema, exceto que,
se for usada a cláusula AUTHORIZATION, todos os
objetos criados serão de propriedade desse usuário.
nome_do_esquema
O nome do esquema a ser criado.
Se for omitido, será usado o
nome_do_usuário
como nome do esquema.
O nome não pode começar com pg_, porque estes
nomes são reservados para os esquemas do sistema.
nome_do_usuário
O nome da função de banco de dados
(role)
do usuário que será o dono do novo esquema.
Se omitido, o padrão é o usuário que está executando o comando.
Para criar um esquema pertencente a outra função de banco de dados,
é necessário ser capaz de utilizar SET ROLE
para esta outra função de banco de dados.
objeto_do_esquema
Um comando SQL definindo um objeto a ser
criado no esquema.
No momento, são aceitos apenas os subcomandos
CREATE TABLE, CREATE VIEW,
CREATE INDEX, CREATE SEQUENCE,
CREATE TRIGGER e GRANT
no comando CREATE SCHEMA.
Podem ser criados outros tipos de objeto usando comandos
distintos após a criação do esquema.
IF NOT EXISTS
Não fazer nada (exceto relatar uma advertência), se já existir
um esquema com o mesmo nome.
Quando esta opção é usada, não podem ser incluídos os
subcomandos do
objeto_do_esquema.
Para criar um esquema, o usuário deve ter o privilégio
CREATE para o banco de dados corrente.
(Claro, os superusuários ignoram esta verificação.)
Criar um esquema:
CREATE SCHEMA meu_esquema;
Criar um esquema para o usuário joe;
o esquema também se chamará joe:
CREATE SCHEMA AUTHORIZATION joe;
Criar um esquema chamado teste, pertencente ao
usuário joe, a menos que já exista um esquema
chamado teste.
(Não faz diferença se joe é o dono do esquema
já existente.)
CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;
Criar um esquema, criando junto uma tabela e uma visão neste esquema:
CREATE SCHEMA hollywood
CREATE TABLE films (title text, release date, awards text[])
CREATE VIEW winners AS
SELECT title, release FROM films WHERE awards IS NOT NULL;
Deve-se observar que os subcomandos não terminam com ponto e vírgula.
O que se segue é uma maneira equivalente de obter o mesmo resultado:
CREATE SCHEMA hollywood;
CREATE TABLE hollywood.films (title text, release date, awards text[]);
CREATE VIEW hollywood.winners AS
SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;
Exemplo 82. Exemplo do tradutor
Esquema para os objetos do Tutorial
Neste exemplo é criado o esquema tutorial,
contendo as tabelas clima e
cidades do Tutorial
(veja Criação de tabelas), e permitida a consulta
a estas tabelas por todos (veja Privilégios).
cristina=> CREATE SCHEMA tutorial
CREATE TABLE clima (
cidade varchar(80), -- nome da cidade
temp_min int, -- temperatura mínima em °C
temp_max int, -- temperatura máxima em °C
prcp real, -- precipitação em mm
data date -- data
)
CREATE TABLE cidades (
nome varchar(80), -- nome da cidade
localizacao point -- coordenadas x, y (Longitude, Latitude)
)
GRANT SELECT ON clima, cidades TO public;
CREATE SCHEMA
A seguir estão listadas as relações e privilégios de acesso do
esquema tutorial:
cristina=> \dt tutorial.*
List of tables
Esquema | Nome | Tipo | Dono
----------+---------+--------+----------
tutorial | cidades | tabela | cristina
tutorial | clima | tabela | cristina
(2 linhas)
cristina=> \dp tutorial.*
Privilégios de acesso
Esquema | Nome | Tipo | Privilégios de acesso | Privilégios de coluna | Políticas
----------+---------+--------+----------------------------+-----------------------+-----------
tutorial | cidades | tabela | cristina=arwdDxtm/cristina+| |
| | | =r/cristina | |
tutorial | clima | tabela | cristina=arwdDxtm/cristina+| |
| | | =r/cristina | |
(2 linhas)
A seguir estão listados todos os esquemas no banco de dados corrente aos quais o usuário corrente tem acesso:
cristina=> SELECT catalog_name, schema_name, schema_owner
FROM information_schema.schemata;
catalog_name | schema_name | schema_owner --------------+--------------------+------------------- cristina | information_schema | postgres cristina | pg_catalog | postgres cristina | public | pg_database_owner cristina | tutorial | cristina (4 linhas)
O padrão SQL aceita a cláusula
DEFAULT CHARACTER SET no comando
CREATE SCHEMA, bem como mais tipos de subcomandos
do que os atualmente aceitos pelo PostgreSQL.
O padrão SQL especifica que os subcomandos em
CREATE SCHEMA podem aparecer em qualquer ordem.
A implementação corrente do PostgreSQL
não lida com todos os casos de referências à frente em subcomandos;
às vezes pode ser necessário reordenar os subcomandos, para evitar
referências à frente.
Segundo o padrão SQL, o dono do esquema
é sempre o dono de todos os objetos dentro dele.
O PostgreSQL permite que esquemas contenham
objetos pertencentes a usuários que não sejam o dono do esquema.
Isto pode acontecer apenas se o dono do esquema conceder o privilégio
CREATE em seu esquema para outro usuário, ou se
um superusuário optar por criar objetos nele.
A opção IF NOT EXISTS é uma extensão do
PostgreSQL.
[137]
Use o comando CREATE SCHEMA para criar várias
tabelas e visões e executar várias concessões em seu próprio
esquema em uma única transação.
Nota: Este comando não cria realmente um esquema.
O banco de dados Oracle cria
automaticamente o esquema quando o usuário é criado.
Este comando permite que o usuário preencha seu esquema com tabelas
e visões, e conceda privilégios a estes objetos, sem precisar
executar vários comandos SQL em várias transações.
Oracle 21 – CREATE SCHEMA (N. T.)
[138]
O comando CREATE SCHEMA define um esquema.
Também é possível criar alguns objetos e conceder privilégios a
objetos dentro do comando.
IBM DB2 12.1.x – CREATE SCHEMA statement (N. T.)