DepartamentodeEngenhariaInformática 2009/2010 BasesdeDados1ºsemestre Lab1:Introduçãoaoambiente Oficheirobank.sqlcontémumconjuntodeinstruçõesSQLparacriarabasededadosde exemploilustradanafigura1. Figura1.Basededadosdeexemplo Para criar a base de dados é necessário criar as tabelas e carregar os registos de cada tabela.acriaçãodastabelaséfeitacomrecursoàinstruçãocreatetable.porexemplo, atabeladeclientespodesercriadacomaseguinteinstruçã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,eaindarestriçõestaiscomoosvaloresnãopoderemsernulleofactodachave primáriadatabelaseronomedocliente. IST/DEI Pág.1de6
BD 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'); emquesãoespecificados,respectivamente,osvaloresdecadacolunapelamesmaordem em que estes foram definidos aquando da criação da tabela 1. Esta instrução resulta na criaçãodeumnovoregistonatabeladeclientes. Note se que o ficheiro bank.sql inclui instruções para inserir mais registos na base de dadosdoqueaquelesqueseencontramexemplificadosnafigura1.estesregistosserão usadospararealizarváriostestessobreabasededados.emaulasdelaboratóriofuturas, iremosutilizarestabasededadosparademonstrarváriosdosconceitosdadisciplina. Configurações Para começar a usar o sistema Postgres disponível na infra estrutura do IST, deverá procederaosseguintespassos: 1. Acedaàpáginadeself servicedociist: https://ciist.ist.utl.pt/servicos/self_service/index.php 2. Activeosserviçosshell,webecgi 3. AbraumasessãoSSH paraoclustersigma.ist.utl.pt(emwindowspodeusar umdos clientes SSHSecureShell ou PuTTY ;emlinuxdeveusarocomando ssh ) 4. Umavezligadoaoclustersigma,executeocomando:psql_reset 5. Ligue seaopostrgrescomocomando:psql hdb.ist.utl.pt 6. Useapassworddadapelopsql_reset Utilizaçãodalinhadecomando Em geral todos os sistemas de gestão de base de dados dispõem de uma linha de comandoatravésdaqualépossívelexecutarinstruçõessqletambémoutroscomandos deadministraçãoemanutençãodosistema. 7. Façadownloaddoficheirobank.sqlqueacompanhaesteguiadelaboratório. 1 Existem outras variantes da instrução INSERT com as quais é possível especificar os valores por outra ordem,ouespecificarapenasalgunsdosvalorespretendidosdeixandoosrestantesanulloucomovalor poromissão(defaultvalue,quenestecasonãofoiespecificado) IST/DEI Pág.2de6
BD 8. Usando um cliente de SFTP ( WinSCP em Windows; scp em Linux) coloque o ficheirobank.sqlnumdirectóriodentrodasuacontanoclustersigma.ist.utl.pt 9. Abra uma sessão SSH para o cluster sigma.ist.utl.pt (ou utilize a sessão anterior) e navegueatéaodirectórioondeguardouoficheiro. 10. Invoqueoprogramapsqlcomocomando:psql hdb.ist.utl.pt 11. Umavezdentrodosistema,utilizeocomando\hparaobterinformaçãosobretodos oscomandossqldisponíveis.use\qparasair. 12. Utilize o comando \? para obter informação sobre todos os comandos de administraçãodisponíveis. 13. Seprecisardesairdoprograma,podeutilizaraqualquermomentoocomando:\q 14. Nalistadecomandosdeadministraçãoteránotadoaexistênciadeumcomandonesta forma: \ifileexecutecommandsfromfile Éestecommandoquevamosutilizarparaexecutarasinstruçõesnoficheirobank.sql. 15. Paraseligaràsuabasededados,utilizeocomando:\cistxxxxx(ondeistxxxxxéoseu nomedeutilizador).pretendem seexecutarasinstruçõesdoficheirobank.sqlnasua basededados. 16. Deseguida,executeocomando: \ibank.sql O Postgres produz algumas mensagens à medida que executa as instruções do ficheiro. 17. Paralistarastabelasdabasededados,useocomando:\d 18. Apósaligaçãoàbasededadospodefazeralgumasconsultas,nomeadamente: veralistacompletadeclientes:select*fromcustomer; veralistacompletadecontas:select*fromaccount; Emaulasfuturasverácomoobterarespostaaconsultasmaiscomplicadas. 19. O tempo que o sistema demora a responder a algumas consultas é um factor importantequandoovolumededadoséconsiderável.executeocomando: \timing IST/DEI Pág.3de6
BD 20. Repita as consultas anteriores. Passará a ver o tempo que o sistema demora a responder. Obterinformaçãosobreoesquemadeumabasededados Paraumabasededadosexistentenosistemamassobreaqualnãohajadocumentação,é possívelusarinstruçõesespeciaisparaobterinformaçãosobreosartefactosexistentesno sistema(basesdedados,tabelas,vistas,funções,etc.).geralmenteestesmecanismossão proprietáriosediferentesparacadasistema. NoPostgresessasfuncionalidadesestãodisponíveisatravésdocomando\devariantes. 21. Utilizeocomando\l( L pequeno)paraobterdetodasasbasesdedadosexistentesno sistema. 22. Paraseligaràsuabasededados,utilizeocomando:\cistxxxxx(ondeistxxxxxéoseu nomedeutilizador) 23. Obtenhainformaçãosobreastabelasdeclientesecontas: \dcustomer \daccount Confirme que esta descrição corresponde às especificações com que essas tabelas foramcriadas. 24. Useocomando\qparasairdosistemaevoltaraoterminal. Utilizaçãodaferramentadeadministraçã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. O sistema Postgres inclui uma ferramenta de administração designadapgadminiii. 25. No PC do laboratório, abra a aplicação pgadmin III (se estiver a usar Linux pode invocaraaplicaçãopgadmincomocomando pgadmin3 ) 26. Clique no botão de adicionar ligação e escreva db.ist.utl.pt como nome e sistema anfitrião.especifiquetambémonomedeutilizadorepassword(dadaporpsql_reset) IST/DEI Pág.4de6
BD 27. Expanda a árvore e localize a sua base de dados, bem como as tabelas, que foram criadasquandoexecutou\ibank.sqlnalinhadecomando. 28. No menu de ferramentas, abra a ferramenta query tool ( ferramenta de consulta seosistemaestiveremportuguês) 29. Escreva as mesmas consultas que realizou anteriormente (p.ex. SELECT * FROM customer;)apósescreverocomandosqluseobotão executarconsulta.observeos resultados. 30. Repitaasmesmasconsultasmasagorautilizeobotão explicarconsulta. 31. 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 sistemageraplanospararesponderaperguntasmaiscomplexas. Geraroscriptdeumabasededados 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, removidosealteradosregistos,demodoqueoestadodabasededadoséoresultadodas operaçõesrealizadas. 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ópriosquesãomaisadequadosparaesseefeito,masoscriptdecriaçãodeumabasede dadoséútilemmuitasocasiões. 32. Abra uma sessão SSH para o cluster sigma.ist.utl.pt (ou utilize a sessão anterior) e invoqueoprogramapg_dumpcomocomando: pg_dump hdb.ist.utl.pt 33. Verá que o programa produz o script no terminal. Vamos redireccionar o output de formaaguardaroscriptnumficheiro. Invoquenovamenteoprogramapg_dumpcomosseguinteparâmetros: pg_dump hdb.ist.utl.pt>backup.sql ondebackup.sqléonomedoficheiroqueserácriado. IST/DEI Pág.5de6
BD 34. Paraveroconteúdodoficheirobackup.sqluseocomando:catbackup.sql 35. Compareoconteúdodebackup.sqlcombank.sql.Algunselementosnãoexistiamno ficheirooriginal.contudo,observequeapesardeusarinstruçõesdiferentesestescript criaráumabasededadosidênticaàoriginal. ListadecomandosPostgresutilizados \h ObterinformaçãosobretodososcomandosSQLdisponíveis. \q SairdalinhadecomandodoPostgres. \? Obterinformaçãosobretodososcomandosdeadministração. \ifile Executaroscomandoscontidosnoficheiroindicado. \cdatabase Ligaràbasededadosindicada. \d Listasastabelasdabasededadosactual. \timing Mostrarotempodeexecuçãodasconsultas. \l Listartodasasbasesdedadosexistentesnosistema. \dtable Obterinformaçãosobreaestruturadeumatabela. IST/DEI Pág.6de6