Linux Day 2014 - Montebelluna. Linux Day 2014 - MontelLUG



Documenti analoghi
31 Marzo 2015 Corso Basi di Dati

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile L'Antipasto 11 Marzo

9 Giugno 2015 Corso di Basi di Dati UNIVERSITÀ DEGLI STUDI DI PADOVA

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

PostgreSQL 8.4. Associazione Italiana PostgreSQL Users Group ConfSL 2009 Speaker's Corner Bologna, 13 Giugno 2009

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

3 Dicembre 2014 GrappaLUG

DBMS (Data Base Management System)

Data warehouse in Oracle

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

PostgreSQL - amministrazione

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di Dati

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

PROGRAMMA DI CLASSE 5AI

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Basi di Dati: Corso di laboratorio

Introduzione a MySQL

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Lezione 8. Metadati, Viste e Trigger

Installazione e configurazione di Java DB in Windows (7)

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Definizione di domini

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A

Volumi di riferimento

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

MySQL Database Management System

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

SQL PER LA DEFINIZIONE DI BASI DI DATI

Architettura di storage

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

Basi di Da( MySQL & MySQL Workbench. Anna Monreale

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

Istruzioni DML di SQL

Esercitazione: Il DBMS MySQL

GERARCHIE RICORSIVE - SQL SERVER 2008

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Sistemi Informativi e Basi di Dati. Laurea Specialistica in Tecnologie di Analisi degli Impatti Ecotossicologici. Docente: Francesco Geri

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Corso sul linguaggio SQL

Introduzione ai Sistemi di Gestione di Basi di Dati XML

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Il sistema IBM DB2. Sistemi Informativi T. Versione elettronica: L01.1.IntroduzioneDB2.pdf

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Il linguaggio SQL: viste e tabelle derivate

SQL Sintassi Dei Comandi

Al giorno d oggi, i sistemi per la gestione di database

L interfaccia a riga di comando di MySql

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Corso sul linguaggio SQL

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

SQL (STRUCTURED QUERY LANGUAGE)

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

2104 volume III Programmazione

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Sistemi per la gestione di database: MySQL ( )

Iniziamo la panoramica sul funzionamento dell'svn sulla suite S.A.

Dispensa di database Access

Introduzione a phpmyadmin

Lezione V. Aula Multimediale - sabato 29/03/2008

Lezione 9. Applicazioni tradizionali

Metodi per la Gestione dei Dati (lezioni di laboratorio)

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Linee di evoluzione dei Database

Transazioni - Parte 1

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

DATABASE.

Corso di Informatica Generale 1 IN1. Linguaggio SQL

MagiCum S.r.l. Progetto Inno-School

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

PHP e Structured Query Language

L architettura di un DBMS

Strumenti Software per Esercitazioni (ambiente Windows) Basi di Dati L LS Ing. Gestionale

Introduzione al linguaggio SQL

MySQL Database Management System

Fate doppio click sul file con nome postgresql-8.0.msi e impostate le varie voci come riportato nelle immagini seguenti:

Lavorare con MySQL Parte Prima.

DBMS ed Applicazioni Motivazioni

Informatica per le discipline umanistiche 2 lezione 10

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

SQL Server Introduzione all uso di SQL Server e utilizzo delle opzioni Olap. Dutto Riccardo - SQL Server 2005.

Esercitazioni di Basi di Dati

Corso di Laboratorio di Basi di Dati

Transcript:

In Tour con gli Elefanti Linux Day - Montebelluna Linux Day - MontelLUG

Prima di partire... Denis Gasparin Senior DBA and Web Developer Sviluppo di soluzioni software basate su PostgreSQL Analista e Database Administrator Contributor del driver PDO PostgreSQL per PHP Membro di IT-PUG Linux Day - MontelLUG

Prepariamo le valigie! Installiamo PostgreSQL $ sudo su $ vi /etc/apt/sources.list.d/pgdg.list # Inserire questa riga nel file deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main $ curl https://www.postgresql.org/media/keys/accc4cf8.asc apt-key add $ apt-get update $ apt-get install postgresql-9.3 $ su -l postgres $ psql -U postgres template1 psql (9.3.5) Digita "help" per avere un aiuto. template1=# Le valigie sono pronte... partiamo! Linux Day - MontelLUG

Letture utili durante il Viaggio Psql: Client nativo per PostgreSQL Completo e manutenuto insieme al backend Facile da usare Programmabile ed integrabile facilmente con la shell PgAdmin: Client grafco per PostgreSQL Editing delle tabelle e dei dati semplice e veloce http://www.pgadmin.org Linux Day - MontelLUG

Si parte! Caratteristiche principali di PostgreSQL: Semplice da installare e da confgurare Stabile Affdabile Veloce PgSql 9.3 PgSql 7.3 @2010 2nd Quadrant http://suckit.blog.hu/2009/09/29/postgresql_history Linux Day - MontelLUG

Guardiamo il Panorama, presente e futuro! PostgreSQL è Cross Platform: si installa su Linux, FreeBSD, Solaris, Mac OS X e Windows anche su sistemi Embedded! Disponibile anche su molte piattaforme Cloud: Amazon RDS, Heroku, RedHat OpenShift Connettività con altri database (anche NO-SQL) Nuovi datatypes: JSON, RANGE, HSTORE Scalabilità orizzontale: data partitioning e data sharding Affidabilità: replica master-slave e multi-master (in futuro) @ https://twitter.com/astro_elephant Linux Day - MontelLUG

Non finisce qui! Estensibile: Repository di estensioni su http://pgxn.org/ Compliant agli standard: ANSI-SQL:2008 ACID: http://it.wikipedia.org/wiki/acid Licenza PostgreSQL: simile alla licenza BSD e MIT Consente redistribuzione del software gratuitamente Linux Day - MontelLUG

Primi Passi con PostgreSQL e Psql Creiamo un utente che possa creare un database: template1=# CREATE USER montellug WITH PASSWORD 'linuxday' CREATEDB SUPERUSER; CREATE ROLE Creiamo un database: $ psql -h 127.0.0.1 -U montellug template1 Sei collegato al database "template1" con nome utente "montellug". template1=# CREATE DATABASE elephants_tour CREATE DATABASE Ci colleghiamo al database: template1=# \c elephants_tour montellug Sei collegato al database "elephants_tour" con nome utente "montellug". elephants_tour=# \dt (visualizziamo le tabelle nel database appena creato) Nessuna relazione trovata Linux Day - MontelLUG

Primi Passi con PostgreSQL e Psql Creiamo una tabella: elephants_tour=# CREATE TABLE posto_visitato ( id serial NOT NULL PRIMARY KEY, nome text NOT NULL, quando date NOT NULL, tipo text CHECK (tipo IN('hotel','residence','campeggio')), durata_soggiorno interval hour to minute ); CREATE TABLE Inseriamo alcuni dati: INSERT INTO posto_visitato (nome, quando, tipo, durata_soggiorno) VALUES ('Montebelluna', '-10-25', 'hotel', '00:40'), ('Castelfranco', '-10-26', 'residence', '02:00'), ('San Martino di Lupari', '-10-27', 'campeggio', '12:00'), ('Tombolo', '-10-28', 'campeggio', '12:00'), ('Galliera Veneta', '-10-29', 'campeggio', '12:00'); Linux Day - MontelLUG

Ho sbagliato strada, posso tornare indietro? Certo! Puoi usare una Transazione! elephants_tour=# BEGIN; BEGIN elephants_tour=# DELETE FROM posto_visitato WHERE nome = 'Montebelluna'; DELETE 1 elephants_tour=# ROLLBACK; ROLLBACK Montebelluna è ancora al suo posto! elephants_tour=# BEGIN; BEGIN elephants_tour=# DELETE FROM posto_visitato WHERE nome = 'Tombolo'; DELETE 1 elephants_tour=# COMMIT; COMMIT Abbiamo cancellato Tombolo! Linux Day - MontelLUG

Le Transazioni ed i comandi DDL DDL = Data Defnition Language (comandi CREATE e DROP TABLE, etc) PostgreSQL MySQL db=# BEGIN; BEGIN mysql> BEGIN; Query OK, 0 rows affected (0,00 sec) db=# DROP TABLE posto_visitato; DROP TABLE; mysql> DROP TABLE posto_visitato; Query OK, 0 rows affected (0,01 sec) db=# ROLLBACK; ROLLBACK mysql> ROLLBACK; Query OK, 0 rows affected (0,01 sec) db=# \dt mysql> SHOW TABLES; Che risultato vi aspettate? Lista delle relazioni Schema Nome Tipo Proprietario --------+----------------+---------+----------public posto_visitato tabella montellug Empty set (0,00 sec) Linux Day - MontelLUG

Le Transazioni ed i comandi DDL PostgreSQL esegue tutti i comandi DDL in transazione Consente di annullare eventuali cambiamenti in ogni momento Utile in caso di script SQL per migrazioni e/o conversioni di un DB Si è certi che la migrazione o va a buon fne o fallisce Compliance ACID Linux Day - MontelLUG

Che bel Tipo sto Elefante: JSON JSON: Javascript Object Notation: trasformazione in stringa di un oggetto JS Principali utilizzi: Chiamate AJAX di una pagina Web Richieste e Risposte nei servizi REST Molti database NO-SQL sono interrogati via JSON elephant_tours=# BEGIN; BEGIN elephant_tours=# ALTER TABLE posto_visitato ADD COLUMN dati json; ALTER TABLE; elephant_tours=# COMMIT; COMMIT db=# \d posto_visitato Linux Day - MontelLUG

Che bel Tipo sto Elefante: JSON UPDATE posto_visitato SET dati = ' { "sindaco": {"nome": "Marzio", "cognome": "Favero", "eta": 49}, "abitanti": 30845, "altitudine": 109 }' WHERE nome = 'Montebelluna'; UPDATE posto_visitato SET dati = ' { "sindaco": {"nome": "Jerry", "cognome": "Boratto", "eta": 44}, "abitanti": 13233, "altitudine": 40 }' WHERE nome = 'San Martino di Lupari'; SELECT * FROM posto_visitato WHERE cast(dati->>'abitanti' AS integer) > 15000; SELECT SUM(cast(dati->>'abitanti' AS integer)) FROM posto_visitato; SELECT * FROM posto_visitato WHERE cast(dati->'sindaco'->>'eta' AS integer) > 45; WITH s AS (SELECT nome,quando FROM posto_visitato) SELECT array_to_json(array_agg(row_to_json(s)),true) FROM s; Linux Day - MontelLUG

Che bel Tipo sto Elefante: RANGE RANGE: Consente di rappresentare un intervallo di valori di un certo tipo Tipi supportati: interi, numeric, timestamps e date CREATE TABLE prenotazione( id serial NOT NULL PRIMARY KEY, giorni daterange ); INSERT INTO prenotazione(giorni) VALUES ('[-10-01, -10-10)'), ('[-10-11, -10-25)'); notare le parentesi [ e ) range contiene una data SELECT * FROM prenotazione WHERE giorni @> '-10-05'::date; sovrapposizione di range SELECT * FROM prenotazione WHERE giorni && '[-10-05, -1015]'::daterange; Linux Day - MontelLUG

Common Table Expressions SQL è un linguaggio dichiarativo: Con una query chiedo al database di ritornare dei dati ma non come farlo Common Table Expressions (CTE) trasformano SQL in linguaggio imperativo Consentono di spezzare una query in parti più semplici Ogni parte può essere una query di selezione ma anche di INSERT, UPDATE o DELETE CTE ricorsive Linux Day - MontelLUG

Common Table Expressions WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region ), top_regions AS ( SELECT region FROM regional_sales ORDER BY total_sales DESC LIMIT 10 ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP BY region, product; WITH old_logs AS (DELETE FROM log WHERE date <='-06-01' RETURNING *) INSERT INTO log_backup SELECT * FROM old_logs; Linux Day - MontelLUG

Window Functions Una window function è simile ad una funzione di raggruppamento Effettua dei calcoli su un gruppo di righe (la cosiddetta fnestra) Non fa collassare le righe in un'unica riga La fnestra viene specifcata con le istruzioni OVER e PARTITION BY confrontare lo stipendio di un dipendente rispetto alla media del suo dipartimento SELECT nome, dipartimento, salario, avg(salario) OVER (PARTITION BY dipartimento) FROM dipendente; ordinare i dipendenti per stipendio descrescente nello stesso dipartimento SELECT nome, dipartimento, salario, rank() OVER (PARTITION BY dipartimento ORDER BY salario DESC) FROM dipendente; Linux Day - MontelLUG

Foreign Data Wrappers Sono estensioni che consentono di collegare Postgres ad altri database o sorgenti dati https://wiki.postgresql.org/wiki/foreign_data_wrappers Esempio: fle data wrapper $ apt-get install postgresql-contrib-9.3 CREATE EXTENSION file_fdw; CREATE SERVER filesystem_server FOREIGN DATA WRAPPER file_fdw; CREATE FOREIGN TABLE dipendente_da_csv ( id integer NOT NULL, nome text NOT NULL, dipartimento text NOT NULL, salario numeric(7,2) NOT NULL ) SERVER filesystem_server OPTIONS (format 'text', filename '/tmp/dipendente.csv', delimiter E'\t', null ''); Linux Day - MontelLUG

Viste Materializzate Le Viste in PostgreSQL sono una semplice riscrittura di una query CREATE VIEW admins AS SELECT * FROM dipendente WHERE dipartimento='admin'; EXPLAIN SELECT * FROM admins ; QUERY PLAN -----------------------------------------------------------Seq Scan on dipendente (cost=0.00..19.00 rows=4 width=82) Filter: (dipartimento = 'ADMIN'::text) Le Viste materializzate memorizzano i dati in una tabella: Query di selezione molto più veloci Non sono consentite operazioni di INSERT, DELETE, UPDATE Possono essere aggiornate globalmente Linux Day - MontelLUG

Viste Materializzate CREATE MATERIALIZED VIEW m_admins AS SELECT * FROM dipendente WHERE dipartimento='admin'; EXPLAIN SELECT * FROM m_admins; QUERY PLAN -----------------------------------------------------------Seq Scan on m_admins (cost=0.00..17.20 rows=720 width=82) Un insert nella tabella originale non viene visto nella vista materializzata INSERT INTO dipendente VALUES (15,'OBAMA','ADMIN',20000); Bisogna usare lo statemente REFRESH REFRESH MATERIALIZED VIEW m_admins; Linux Day - MontelLUG

Viste Materializzate e Foreign Data Wrappers Le viste materializzate consento di velocizzare moltissimo l'accesso a sorgenti dati esterne: Importano i dati nativamente in PostgreSQL Le viste materializzate sono indicizzabili CREATE MATERIALIZED VIEW m_dipendente_da_csv AS SELECT * FROM dipendente_da_csv; SELECT * FROM m_dipendente_da_csv; CREATE INDEX idx_dipartimento ON m_dipendente_da_csv(dipartimento); Da PostgreSQL 9.4, le viste potranno essere aggiornate senza ottenere un LOCK esclusivo sulla vista materializzata Linux Day - MontelLUG

Sicurezza: backup e replica PostgreSQL offre innumerevoli metodi di backup: Logico: dump SQL del database Fisico: pg_dump, pg_dumpall Copia fsica della cartella con il DB e memorizzazione dei WAL log generati dalle transazioni Consente il ripristino in un certo momento nel tempo Replica: Un database master può essere replicato su diverse istanze slave Molto veloce ed ottimizzato anche per replica geografca Linux Day - MontelLUG

Non viaggiate mai da soli! La comunità di PostgreSQL è molto attiva Potete trovare aiuto nelle mailing list Oppure nel canale IRC http://www.postgresql.org/list/ http://www.postgresql.org/community/irc/ In Italia esiste IT-PUG, fondato nel 2007 Organizza il PG-DAY Italiano Mailing List in Italiano http://www.itpug.org Linux Day - MontelLUG

Ci vediamo a Prato 7 Novembre! Iscrivetevi! http://.pgday.it/ Grazie! denis@gasparin.net http://www.gasparin.net Attribuzione Non commerciale Condividi allo stesso modo 3.0 Unported (CC BY-NC-SA 3.0) http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it Linux Day - MontelLUG