PDA

Visualizza la versione completa : [POSTGRESQL] Creazione, backup, ripristino database


Shadow976
09-08-2009, 18:54
Premetto che lavoro in Java & Postgre ma sto procedendo astraendomi completamente dal db, ovvero tutto il mio codice scritto ad oggi sarebbe valido anche con MySql o Oracle. Ho le seguenti esigenze:

1) CREAZIONE. Non voglio che l'utente che installa il mio programma sul suo server o sul suo hosting remoto debba creare il db da script usando il solito tool remoto di amministrazione (PG Admin o phpMyAdmin) ed eseguendo il mio file database.sql. Voglio risparmiargli questa fatica; deve solo uploadare il mio war ed al primo avvio il db si creerà da solo con uno script apposito. E' tecnicamente possibile! Quando usavo .net, per questa operazione usavo il trucco di far connettere la mia applicazione al superutente e/o ad un "superdatabase" (scusate, era molti anni fa, ricordo pochino!) che di default era sempre presente sin dalla installazione di SQL Server. E si creava da sé che era una meraviglia. Come fare lo stesso? Sappiate solo che il motore di database sarà sempre "locale" rispetto al percorso dell'applicazione.

2) BACKUP. Voglio che con un pulsante nella mia web application si scarichi un file backup.sql. Esiste un comando SQL (magari per PG ma valido anche per altri database) che esegua un backup completo del database? Qualcosa da "propinargli" usando il formalismo di una normale query, come un normale comando SQL.

3) RIPRISTINO. Come sopra.

Grazie a tutti.

Shadow976
09-08-2009, 22:45
Non ci riesco, sono nelle vostre mani...

standard
10-08-2009, 10:18
Per la creazione del DB potresti configurare degli script ant da lancirae in fase di deploy. Esistono molti esempi, anche nei tutorial JavaEE che lo fanno.
Comunque per progetti di gestionali di medie-grandi dimensioni difficilmente ho visto il tutto installabile con un click, aldilà dei moduli di base.
Ma essendo il tuo un progetto che gira in locale, credo che passare per ant come configurazione di deploy e creazione del DB potrebbe essere risolutivo.

Per le azioni di back-up e ripristino, dipendono dal db che usi, quindi ti suggerisco di spulciare un po' la documentazione.

Shadow976
10-08-2009, 10:43
Standard sei stato gentilissimo, ero davvero in alto mare. Per il backup e ripristino sto risolvendo, sto cercando uno script come dici tu.

Per la creazione sono un pò in alto mare. Il mio non è un gestionale di enormi dimensioni, ma per me di enorme importanza in quanto in futuro voglio dedicarmi solo ad esso ed al suo perfezionamento. Potrebbe essere installato in locale ma anche su hosting remoto; in ogni caso la mia applicazione lo vedrà come local. Per questa ragione la tua soluzione mi pare ottima.

Solo, perdona la mia ignoranza, leggendo la tua soluzione mi sento un pò spiazzato. Potresti farmi un esempio pratico?

Ovvero, se volessi creare myDb, associandogli l'utente myUser e myPsw, in Postgre, e su un hosting remoto che ha spazio web e motore database sullo stesso server (quindi local), come potrei fare? Vedi, il vero nocciolo del problema è la primissima parte, che ti espongo in linguaggio discorsivo:

connettiti al database "x" tramite il superutente "superUser, superPsw" (db e utente presenti di default, sin dalla installazione del motore DB) e quindi (seconda parte, per me meno problematica) crea il mio db con le mie credenziali.

Grazie infinite.

standard
10-08-2009, 11:01
Ti do qualche spunto:
http://www.java2s.com/Code/Java/Ant/Yourantscripttobuildtable.htm
http://docs.google.com/gview?a=v&q=cache:yIsuG1iD8TYJ:www.ericsson.com/mobilityworld/developerszonedown/downloads/docs/open_development_tips/mysql.pdf+ant+create+database&hl=it&gl=it
http://www.java-samples.com/showtutorial.php?tutorialid=633
http://www.roseindia.net/tutorials/ant/UsingAntBuildScripts.shtml

ma sono il frutto di una ricerca di due minuti.
Molte delle IDE Java più diffuse (es. NetBeans) integrano nativamente procedure di deploy tramite file di configurazione ant.
Customizzando un po' questi script (la maggior parte delle volte rimaneggiando esempi già pronti) dovresti riuscire a far quello che ti serve.

denis76
10-08-2009, 12:14
Non capisco se vuoi uno script che definisca la base di dati oppure se ti basta uno script che crei le tabelle se non esistenti oppure le colonne se mancanti...

Shadow976
10-08-2009, 12:22
No no!

Dato il database con il suo utente e la sua psw, riesco a creare senza problemi tabelle, viste, funzioni...

Il problema si pone nella creazione del db, e non tanto per la sua creazione vera e propria (basterebbe uno script banalissimo create myDb creando poi tramite script le credenziali da associarvi), ma, e questo è il punto, per le credenziali alle quali connettersi prima ancora della sua creazione!

Ovvero, se non ho ancora creato nulla, qual'è quel "superutente" e quel, diciamo, "superdb" al quale connettersi quando ancora l'utente non ha creato alcun database o utente, ovvero qual'è quell'account che in Postgre è presente di default sin dalla prima installazione del motore db?

denis76
10-08-2009, 12:25
Si può. Se apri pgAdmin e clicchi su un utente ad esempio esso ti mostra il codice sql necessario per creare utenti eccetera.
Scopiazzando quindi un po' di codice, conoscendo userid e password del superutente puoi creare utenti e basi di dati.

comas17
10-08-2009, 21:15
Originariamente inviato da Shadow976

Ovvero, se non ho ancora creato nulla, qual'è quel "superutente" e quel, diciamo, "superdb" al quale connettersi quando ancora l'utente non ha creato alcun database o utente, ovvero qual'è quell'account che in Postgre è presente di default sin dalla prima installazione del motore db?

Secondo me, quale che sia la risposta a questa domanda (ne parlo dopo) hai comunque bisogno di chiedere all'utente di inserire un utente ed una password per collegarsi al database.

Intanto, stiamo parlando di PostgreSQL installato su Windows o Linux ?

Da quanto ho capito (non sono per niente esperto di PostgreSQL ma l'argomento mi interessa) al momento dell'installazione su Windows PostgreSQL crea un proprio utente (di Windows) che utilizzerà per far girare i propri servizi; tipicamente l'utente si chiama "postgres"; non so quale sia la password ma in caso di un servizio in hosting è da presumere che se anche ce ne fosse una di default, essa verrà sicuramente cambiata

Anche ammettendo quindi di conoscere l'utente (non è detto che l'installazione sia stata fatta con tutti i parametri di default, quindi non è nemmeno sicuro che esista effettivamente un utente che sia chiama postgres...) in ogni caso non si conosce la password

Quindi io prevederei che al momento della prima installazione, si vadano ad inserire le informazioni di utente/password necessarie per collegarsi al server (e lanciare uno script che crea il database, eventuali altri utenti, etc)
Questo peraltro ti potrebbe aiutare nel caso eventuale volessi permettere l'utilizzo di altri DB server (SQL Server, Oracle, etc); ognuno ha i propri utenti "di sistema" (sa per SQL Server, SYS ed altri per Oracle, etc) e non è certo pensabile di poterli conoscere tutti a priori (e soprattutto di conoscerne le password...)

Molti applicativi che conosco gestiscono in maniera separata le funzioni di "creazione iniziale del database" e "backup/ripristino"; il backup/ripristino è una funzionalità di uso comune e quindi viene inserita nell'applicativo "principale"; l'altra viene eseguita una sola volta all'inizio e quindi spesso si utilizza proprio un piccolo applicativo separato, dedicato solo a questa prima installazione/configurazione

Shadow976
10-08-2009, 22:49
Molto interessante. Una risposta odierna del mio provider oltretutto mi avvisava che da Plesk (pannello in uso in moltissimi hosting) è peraltro possibile creare un utente solo dopo aver creato il relativo db quindi non ho scelta, devo per forza chiedere in fase di installazione di specificare nomedb, user e psw associati allo stesso db che (ahimé) l'utente dovrà creare preventivamente. Per semplicità ingloberò tutto in una unica applicazione.

Riguardo backup e ripristino vi chiederei semplicemente un esempio di frammento di codice che via SQL possa produrre semplicemente uno script di creazione completa di tutti gli oggetti. Riguardo il restore non vi chiedo nulla: credo (correggetemi se sbaglio) che se il file di cui sopra sia stato correttamente creato sia sufficiente solo inviarlo al db sotto forma di query ed il gioco è fatto.

Lo script che vi chiederei dovrebbe essere possibilmente adattabile a diversi db, non solo Postgre.

Grazie ancora a tutti per la vostra pazienza.

Loading