Banco de Dados PostgreSQL TIPOS DE DADO DATA DEFINITION LANGUAGE • • • • • Database - Create, Alter, Drop Schema - Create, Alter, Drop Tablespace - Create, Alter Drop Table - Create, Alter, Drop Index - Create, Alter, Drop Principais comandos DDL DATABASE CREATE DATABASE nome [ [ WITH ] [ OWNER [=] dono_do_banco_de_dados ] [ TEMPLATE [=] modelo ] [ ENCODING [=] codificação ] [ TABLESPACE [=] espaço_de_tabelas ] ] O comando CREATE DATABASE cria um banco de dados no PostgreSQL. Exemplos • Para criar um banco de dados: • CREATE DATABASE lusiadas; • Para criar o banco de dados vendas pertencendo ao usuário usuvendas com o espaço de tabelas padrão espvendas: • CREATE DATABASE vendas OWNER usuvendas TABLESPACE espvendas; • Para criar o banco de dados musica com suporte a conjunto de caracteres ISO-8859-1: • CREATE DATABASE musica ENCODING 'LATIN1'; ALTER DATABASE nome SET parâmetro { TO | = } { valor | DEFAULT } ALTER DATABASE nome RESET parâmetro ALTER DATABASE nome RENAME TO novo_nome ALTER DATABASE nome OWNER TO novo_dono O comando ALTER DATABASE altera os atributos de um banco de dados. Exemplo Para desabilitar a varredura de índices no banco de dados teste por padrão: • ALTER DATABASE teste SET enable_indexscan TO off; DROP DATABASE nome O comando DROP DATABASE remove um banco de dados. O comando DROP DATABASE não pode ser desfeito. Utilize com cuidado! Exemplo Para apagar o banco de dados empresas: • DROP DATABASE empresas; SCHEMA CREATE SCHEMA nome_do_esquema [ AUTHORIZATION nome_do_usuário ] [ elemento_do_esquema [ ... ]] CREATE SCHEMA AUTHORIZATION nome_do_usuário [ elemento_do_esquema [ ... ] ] O comando CREATE SCHEMA cria um esquema no banco de dados corrente Exemplos • Criar um esquema: • CREATE SCHEMA meu_esquema; • Criar um esquema para o usuário antonio; o esquema também se chamará antonio: • CREATE SCHEMA AUTHORIZATION antonio; ALTER SCHEMA nome RENAME TO novo_nome ALTER SCHEMA nome OWNER TO novo_dono O comando ALTER SCHEMA altera a definição de um esquema. Exemplos • Alterar nome de um schema • ALTER SCHEMA rh RENAME TO recursoshumanos; DROP SCHEMA nome [, ...] [ CASCADE | RESTRICT ] O comando DROP SCHEMA remove esquemas do banco de dados. Exemplos • Para remover do banco de dados o esquema meu_esquema junto com todos os objetos que este contém: • DROP SCHEMA meu_esquema CASCADE; TABLESPACE CREATE TABLESPACE nome_do_espaço_de_tabelas [ OWNER nome_do_usuário ] LOCATION 'diretório' O comando CREATE TABLESPACE registra um novo espaço de tabelas para todo o agrupamento. Exemplos • Criar o espaço de tabelas dbspace em /data/dbs: • CREATE TABLESPACE dbspace LOCATION '/data/dbs'; • Criar o espaço de tabelas indexspace em /data/indexes pertencendo ao usuário genevieve: • CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes'; ALTER TABLESPACE nome RENAME TO novo_nome ALTER TABLESPACE nome OWNER TO novo_dono O comando ALTER TABLESPACE altera a definição de um espaço de tabelas. Exemplos • Mudar o nome de espaco_para_indices para raid_rapido: • ALTER TABLESPACE espaco_para_indices RENAME TO raid_rapido; • Mudar o dono do espaço de tabelas espaco_para_indices: • ALTER TABLESPACE espaco_para_indices OWNER TO maria; DROP TABLESPACE nome_do_espaço_de_tabelas O comando DROP TABLESPACE remove do sistema um espaço de tabelas. Exemplos • Para remover do sistema o espaço de tabelas minhas_coisas: • DROP TABLESPACE minhas_coisas; TABLE CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE nome_da_tabela ( { nome_da_coluna tipo_de_dado [ DEFAULT expressão_padrão ] [ restrição_de_coluna [ ... ] ] | restrição_de_tabela | LIKE tabela_ancestral [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ INHERITS ( tabela_ancestral [, ... ] ) ] [ WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE espaço_de_tabelas ] O comando CREATE TABLE cria uma tabela, inicialmente vazia, no banco de dados corrente. O usuário que executa o comando se torna o dono da tabela. onde restrição_de_coluna é: [ CONSTRAINT nome_da_restrição ] { NOT NULL | NULL | UNIQUE [ USING INDEX TABLESPACE espaço_de_tabelas ] | PRIMARY KEY [ USING INDEX TABLESPACE espaço_de_tabelas ] | CHECK (expressão) | REFERENCES tabela_referenciada [ ( coluna_referenciada ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE ação ] [ ON UPDATE ação ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] e restrição_de_tabela é: [ CONSTRAINT nome_da_restrição ] { UNIQUE ( nome_da_coluna [, ... ] ) [ USING INDEX TABLESPACE espaço_de_tabelas ] | PRIMARY KEY ( nome_da_coluna [, ... ] ) [ USING INDEX TABLESPACE espaço_de_tabelas ] | CHECK ( expressão ) | FOREIGN KEY ( nome_da_coluna [, ... ] ) REFERENCES tabela_referenciada [ ( coluna_referenciada [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE ação ] [ ON UPDATE ação ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] Exemplos ALTER TABLE [ ONLY ] nome [ * ] ação [, ... ] ALTER TABLE [ ONLY ] nome [ * ] RENAME [ COLUMN ] coluna TO novo_nome_da_coluna ALTER TABLE nome RENAME TO novo_nome onde ação é uma entre: ADD [ COLUMN ] coluna tipo [ restrição_de_coluna [ ... ] ] DROP [ COLUMN ] coluna [ RESTRICT | CASCADE ] ALTER [ COLUMN ] coluna TYPE tipo [ USING expressão ] ALTER [ COLUMN ] coluna SET DEFAULT expressão ALTER [ COLUMN ] coluna DROP DEFAULT ALTER [ COLUMN ] coluna { SET | DROP } NOT NULL ALTER [ COLUMN ] coluna SET STATISTICS inteiro ALTER [ COLUMN ] coluna SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ADD restrição_de_tabela DROP CONSTRAINT nome_da_restrição [ RESTRICT | CASCADE ] CLUSTER ON nome_do_índice SET WITHOUT CLUSTER SET WITHOUT OIDS OWNER TO novo_dono SET TABLESPACE nome_do_espaço_de_tabelas O comando ALTER TABLE altera a definição de uma tabela existente. DROP TABLE nome [, ...] [ CASCADE | RESTRICT ] O comando DROP TABLE remove tabelas do banco de dados. Exemplos • Remover duas tabelas, filmes e distribuidores: • DROP TABLE filmes, distribuidores; INDEX CREATE [ UNIQUE ] INDEX nome_do_índice ON tabela [ USING método ] ( { coluna | ( expressão ) } [ classe_de_operadores ] [, ...] ) [ TABLESPACE espaço_de_tabelas ] [ WHERE predicado ] O comando CREATE INDEX constrói o índice nome_do_índice na tabela especificada. Exemplos • Para criar um índice B-tree para a coluna titulo na tabela filmes: • CREATE UNIQUE INDEX unq_titulo ON filmes (titulo); • Para criar um índice para a coluna codigo da tabela filmes e fazer o índice residir no espaço de tabelas espaco_indices: • CREATE INDEX idx_codigo ON filmes(codigo) TABLESPACE espaco_indices; ALTER INDEX nome ação [, ... ] ALTER INDEX nome RENAME TO novo_nome O comando ALTER INDEX altera a definição de um índice existente. onde ação é um entre: OWNER TO novo_dono SET TABLESPACE nome_do_espaço_de_índices Exemplos • Para mudar o nome de um índice existente: • ALTER INDEX distribuidores RENAME TO fornecedores; • Para mover um índice para outro espaço de tabelas: • ALTER INDEX distribuidores SET TABLESPACE espaco_de_tabelas_rapido; DROP INDEX nome [, ...] [ CASCADE | RESTRICT ] O comando DROP INDEX remove do sistema de banco de dados um índice existente. Exemplos • O comando a seguir remove o índice idx_titulo: • DROP INDEX idx_titulo; • Para Banco de Dados RH • Criar Banco de Dados – Empresas • Criar Squema RH • Criar Tabelas • • • • Empresa Departamento Funcao Teste – com codigo, nome, data, valor Exercícios • Alterar nome do squema para recursoshumanos • Alterar nome da tabela teste para teste2 • Alterar tipo da coluna codigo da tabela teste2 para decimal e data para timestamp • Criar um índice único para o nome da tabela teste2 • Criar as primary keys e constratints de relacionamento para as tabelas Empresa, Departamento e Funcao • Adicionar uma coluna e-mail na tabela teste2 • Apagar índice da coluna nome da tabela teste2 • Apagar tabela teste2