Departamento de Engenharia Informática 2008/2009 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1. Figura 1. Base de dados de exemplo Para criar a base de dados é necessário criar as tabelas e carregar os registos de cada tabela. A criação das tabelas é feita com recurso à instrução CREATE TABLE. Por exemplo, a tabela de clientes pode ser criada com a seguinte instrução: create table customer (customer_name varchar(255) not null unique, customer_street varchar(255) not null, customer_city varchar(255) not null, primary key(customer_name)); Esta instrução especifica o nome da tabela, os nomes das três colunas, o tipo de cada coluna, e ainda restrições tais como os valores não poderem ser NULL e o facto da chave primária da tabela ser o nome do cliente. IST/DEI Pág. 1 de 6
Os registos de cada tabela são carregados através de instruções do tipo INSERT. Por exemplo: insert into customer values ('Jones','Main','Harrison'); em que são especificados, respectivamente, os valores de cada coluna pela mesma ordem em que estes foram definidos aquando da criação da tabela 1. Esta instrução resulta na criação de um novo registo na tabela de clientes. Utilização da linha de comando Para realizar os passos que se seguem, reinicie o computador em Linux. Em geral todos os sistemas de gestão de base de dados dispõe de uma linha de comando através da qual é possível executar instruções SQL e também outros comandos de administração e manutenção do sistema. Enquanto que a linguagem SQL está normalizada e pode ser usada em todos os sistemas, já os comandos de administração e manutenção são específicos e diferentes para cada sistema. No Postgres a linha de comando está acessível através do programa psql. 1. Faça download do ficheiro create-bank.sql e guarde-o num directório à sua escolha (p.ex. /var/www/) 2. Abra um terminal e navegue até ao directório onde guardou o ficheiro create-bank.sql 3. Invoque o programa psql com o comando: psql -U postgres -h localhost -W onde -U postgres indica o nome de utilizador. O sistema pedirá a password, que é idêntica ao nome de utilizador. 4. Uma vez dentro do sistema, utilize o comando \h para obter informação sobre todos os comandos SQL disponíveis. Use \q para sair. 5. Utilize o comando \? para obter informação sobre todos os comandos de administração disponíveis. 1 Existem outras variantes da instrução INSERT com as quais é possível especificar os valores por outra ordem, ou especificar apenas alguns dos valores pretendidos deixando os restantes a NULL ou com o valor por omissão (default value, que neste caso não foi especificado) IST/DEI Pág. 2 de 6
6. Se precisar de sair do programa, pode utilizar a qualquer momento o comando: \q 7. Na lista de comandos de administração terá notado a existência de um comando nesta forma: \i FILE execute commands from file 8. É este commando que vamos utilizar para executar as instruções no ficheiro createbank.sql. Execute o comando: \i create-bank.sql O Postgres produz algumas mensagens à medida que executa as instruções do ficheiro. 9. Ligue-se à base de dados recém-criada com o comando: \c bank 10. Para listar as tabelas da base de dados, use o comando: \d 11. Após a ligação à base de dados pode fazer algumas consultas, nomeadamente: ver a lista completa de clientes: SELECT * FROM customer; ver a lista completa de contas: SELECT * FROM account; Em aulas futuras verá como obter a resposta a consultas mais complicadas. 12. O tempo que o sistema demora a responder a algumas consultas é um factor importante quando o volume de dados é considerável. Execute o comando: \timing Repita as consultas anteriores. Passará a ver o tempo que o sistema demora a responder. 13. Use o comando \q para sair do sistema e voltar ao terminal. Obter informação sobre o esquema de uma base de dados Para uma base de dados existente no sistema mas sobre a qual não haja documentação, é possível usar instruções especiais para obter informação sobre os artefactos existentes no sistema (bases de dados, tabelas, vistas, funções, etc.). Geralmente estes mecanismos são proprietários e diferentes para cada sistema. No Postgres essas funcionalidades estão disponíveis através do comando \d e variantes. 1. Abra um terminal e invoque o programa psql com o comando: psql -U postgres -h localhost -W IST/DEI Pág. 3 de 6
2. Utilize o comando \l ( L pequeno) para obter uma relação de todas as bases de dados existentes no sistema. 3. Para se ligar à base de dados bank, utilize o comando: \c bank 4. Obtenha informação sobre as tabelas de clientes e contas: \d customer \d account Confirme que esta descrição corresponde às especificações com que essas tabelas foram criadas. 5. Use o comando \q para sair do sistema e voltar ao terminal. Utilização da ferramenta de administração A linha de comando é geralmente a forma de ter acesso a todas as funcionalidades do sistema. No entanto, para um conjunto limitado de tarefas é possível recorrer a ferramentas mais simples. A distribuição do Postgres inclui uma ferramenta de administração designada pgadmin III. 1. Abra um terminal e chame a aplicação pgadmin III com o comando: pgadmin3 2. Clique no botão de adicionar ligação e escreva localhost como nome e sistema anfitrião. Especifique também o nome de utilizador e palavra-passe. 3. Expanda a árvore e localize a base de dados bank, bem como as suas tabelas, que foram criadas quando executou \i create-bank.sql na linha de comando. 4. No menu de ferramentas, abra a ferramenta query tool ( ferramenta de consulta se o sistema estiver em português) 5. Escreva as mesmas consultas que realizou anteriormente na linha de comando. Após escrever o comando SQL use o botão executar consulta. Observe os resultados. 6. Repita as mesmas consultas mas agora utilize o botão explicar consulta. 7. Repare que o sistema mostra graficamente o plano de execução que seguiu para responder à consulta. Para perguntas simples como esta, foi necessária apenas uma operação de pesquisa sequencial. Mais para a frente na disciplina veremos como o sistema gera planos para responder a perguntas mais complexas. IST/DEI Pág. 4 de 6
Gerar o script de uma base de dados A base de dados de exemplo foi criada com recurso a um script (ficheiro de texto) com uma série de instruções SQL. Durante a utilização da base de dados serão adicionados, removidos e alterados registos, de modo que o estado da base de dados é o resultado das operações realizadas. A qualquer momento é possível gerar um script quer para efeitos de backup, quer para efeitos de replicação da base de dados noutro sistema. Em geral existem mecanismos próprios que são mais adequados para esse efeito, mas o script de criação de uma base de dados é útil em muitas ocasiões. 1. Abra um terminal e invoque o programa pg_dump com o comando: pg_dump -U postgres -h localhost -W bank onde bank é o nome da base de dados cujo script se pretende obter. 2. Verá que o programa produz o script no terminal. Vamos redireccionar o output de forma a guardar o script num ficheiro. Invoque novamente o programa pg_dump com os seguinte parâmetros: pg_dump -U postgres -h localhost -W bank > backup-bank.sql onde backup-bank.sql é o nome do ficheiro que será criado. 3. Para ver o conteúdo do ficheiro backup-bank.sql use o comando: cat backup-bank.sql 4. Compare o conteúdo de backup-bank.sql com create-bank.sql. Alguns elementos não existiam no ficheiro original. Contudo, observe que apesar de usar instruções diferentes este script criará uma base de dados idêntica à original. Importação de dados Muitas vezes é necessário importar dados que se encontram noutro formato, por exemplo numa folha de cálculo. É geralmente possível converter esses dados para um ficheiro de texto separado por vírgulas (CSV) ou por tabs (TSV). Uma vez num destes formatos, o Postgres dispõe de um comando \copy que permite importar esses dados. 1. Crie um ficheiro de texto com várias linhas correspondentes a novos clientes, em que cada linha tem a forma: nome,rua,cidade IST/DEI Pág. 5 de 6
2. Invoque o programa psql. 3. Ligue-se à base de dados bank. 4. Faça uma consulta à tabela customer para ver o seu conteúdo. 5. Execute o comando: \copy tabela from ficheiro with delimiter ',' onde tabela deve ser substituído pelo nome da tabela que receberá os dados e ficheiro deve ser substituído pelo nome do ficheiro de texto que criou. 6. Faça uma consulta à tabela customer para ver o conteúdo. 7. Faça uma consulta à tabela account para ver o conteúdo. 8. Crie um ficheiro de texto com um única linha que descreva uma nova conta a adicionar à tabela account: A-555,New York,800.00 9. Execute um comando \copy para importar estes dados para a tabela account. 10. O sistema produz um erro. Consegue encontrar uma possível explicação para a causa deste erro? 11. Altere os dados da conta A-555 de modo que o sistema deixe de produzir o erro e aceite os novos dados. 12. Execute novamente o comando \copy e faça uma consulta à tabela account para ver o conteúdo. Lista de comandos Postgres utilizados \h Obter informação sobre todos os comandos SQL disponíveis. \q Sair da linha de comando do Postgres. \? Obter informação sobre todos os comandos de administração. \i file Executar os comandos contidos no ficheiro indicado. \c database Ligar à base de dados indicada. \d Listas as tabelas da base de dados actual. \timing Mostrar o tempo de execução das consultas. \l Listar todas as bases de dados existentes no sistema. \d table Obter informação sobre a estrutura de uma tabela. \copy Copiar o conteúdo de um ficheiro para uma tabela. IST/DEI Pág. 6 de 6