PostgreSQL

Η **PostgreSQL** είναι μια σχεσιακή βάση δεδομένων ανοικτού κώδικα με πολλές δυνατότητες. Η ανάπτυξη της διαρκεί ήδη πάνω από δύο δεκαετίες και βασίζεται σε μια αποδεδειγμένα καλή αρχιτεκτονική η οποία έχει δημιουργήσει μια ισχυρή αντίληψη των χρηστών της γύρω από την αξιοπιστία, την ακεραιότητα δεδομένων και την ορθή λειτουργία.

Η PostgreSQL τρέχει σε όλα τα βασικά λειτουργικά συστήματα, στα οποία περιλαμβάνονται το Linux, το UNIX (AIX, BSD, HP-UX, SGI, IRIX, MAC OS X, Solaris, Tru64) και τα Windows. Είναι συμβατή με ACID, και συμπεριλαμβάνει τους περισσότερους SQL92 και SQL99 τύπους δεδομένων συμπεριλαμβανομένων INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL και TIMESTAMP. Επίσης υποστηρίζει αποθήκευση μεγάλων δυαδικών αντικειμένων (binary), όπως εικόνες, ήχοι ή βίντεο. Διαθέτει επίσης περιβάλλοντα προγραμματισμού για τις γλώσσες προγραμματισμού C, C++, Java, Perl, Python, Ruby, Tcl, και υποστήριξη για την πλατφόρμα .NET και το πρότυπο ODBC, ενώ περιλαμβάνει και εξαιρετικό εγχειρίδιο χρήσης.

## Ιστορία
Η PostgreSQL προέρχεται από το πακέτο *POSTGRES*, το οποίο γράφτηκε στο Πανεπιστήμιο του Μπέρκλεϋ στην Καλιφόρνια των Η.Π.Α.. Αναπτύσσεται πάνω από δύο δεκαετίες και αποτελεί πλέον την πιο προχωρημένη βάση δεδομένων ανοιχτού κώδικα.

### Σχέδιο POSTGRES
Το *σχέδιο POSTGRES* υπό την ηγεσία του καθηγητή Michael Stonebreaker ξεκίνησε να εφαρμόζεται το 1986. Η POSTGRES έχει αρκετά σημαντικές διανομές από τότε. Η πρώτη δοκιμαστική έκδοση του συστήματος παρουσιάστηκε το 1988 στο συνέδριο *ACM-SIGMOD* και κυκλοφόρησε σε μικρή ομάδα ατόμων τον Ιούνιο του 1989. Η POSTGRES χρησιμοποιήθηκε για την εφαρμογή ποικίλων εφαρμογών παραγωγής και έρευνας, όπως για παράδειγμα ένα οικονομικό σύστημα ανάλυσης δεδομένων, ένα πακέτο παρακολούθησης της απόδοσης ενός κινητήρα τζετ, βάση δεδομένων εντοπισμού αστεροειδή, μιας ιατρικής βάσης δεδομένων και μερικών συστημάτων γεωγραφικής πληροφορίας. Η POSTGRES χρησιμοποιήθηκε επίσης ως εργαλείο εκπαίδευσης σε ορισμένα πανεπιστήμια.

### Postgres95
Το 1994 προστέθηκε διερμηνέας γλώσσας SQL από τους Andrew Yu και Jolly Chen. Υπό την ονομασία *Postgres95* απελευθερώθηκε στο διαδίκτυο ως απόγονος ανοιχτού κώδικα του αρχικού κώδικα POSTGRES Berkeley. Ο κώδικας της Postgres95 αποτελούνταν από ANSI C και περιορίστηκε το μέγεθός του κατά 25% σε σχέση με τον κώδικα της POSTGRES. Πολλές εσωτερικές αλλαγές βελτίωσαν την αποδοτικότητα και την δυνατότητα συντήρησής της. 

### PostgreSQL
Το 1996 έγινε σαφές ότι η ονομασία Postgres95 δεν θα αντέξει με την πάροδο του χρόνου, γι' αυτό και επιλέχθηκε η ονομασία **PostgreSQL** ώστε να αντικατοπτρίσει την σχέση ανάμεσα στην αρχική POSTGRES και τις πιο πρόσφατες εκδόσεις με συμβατότητα SQL. Την ίδια χρονιά ορίστηκε η αρίθμηση των εκδόσεων να ξεκινά από το νούμερο 6.0, έτσι ώστε να συνεχίζεται από την αρίθμηση που ξεκίνησε από το αρχικό σχέδιο POSTGRES Berkeley.

## Χαρακτηριστικά
* ANSI SQL 89, 92, 93
* 100% συμβατή με ACID και πλήρη υποστήριξη commit και rollback.
* Online αντίγραφα ασφαλείας: υψηλότερη ασφάλεια και διαθεσιμότητα των δεδομένων.
* Τύποι δεδομένων: numeric, decimal, smallint, integer, bigint, real, double, serial, char, varchar, bit, text, date, time, timestamp, interval, boolean, network address, geometric types και πολλά άλλα.
* Δυνατότητα δημιουργίας νέων τύπων δεδομένων από τους χρήστες.
* Αποθήκευση BLOBS (binary large objects), συμπεριλαμβανομένων αρχείων κειμένου, ήχου, εικόνων ή βίντεο.
* Πλήρης υποστήριξη συναρτήσεων συγκεντρωτικών αποτελεσμάτων (GROUP_BY) όπως COUNT, SUM, AVG, MIN, MAX, STDDEV and VARIANCE. Δυνατότητα δημιουργίας νέων συγκεντρωτικών συναρτήσεων εφόσον χρειαστεί.
* Υποστήριξη όλων των τύπων ενώσεων (cross, inner, outer, left, right, full, natural).
* Συναρτήσεις ορισμένες από τον χρήστη, οι οποίες μπορούν να γραφούν σε πολλές γλώσσες προγραμματισμού όπως C, SQL, PL/pgSQL, TCL, Perl, Python and Ruby.
* Περιβάλλον ανάπτυξης γλωσσών προγραμματισμού όπως Perl, Python, Zope, PHP, TCL/TK, ODBC, JDBC, C/C++, Embedded SQL, Delphi/Kylix/Pascal, VB, ASP, Java.
* Βιβλιοθήκη συναρτήσεων και τελεστών με ορισμένες προεγκατεστημένες συναρτήσεις όπως math, date/time, string, geometric, formating κ.α.
* Συναρτήσεις trigger μπορούν να οριστούν από οποιαδήποτε γλώσσα προγραμματισμού που υποστηρίζει server όπως C ή PL/pgQL.
* Προσωρινοί πίνακες οι οποίοι σβήνονται αυτόματα μετά το τέλος της συνόδου.
* Μοντέλο ασφαλείας ομάδας/χρήστη. Η πρόσβαση στο διακομιστή της βάσης δεδομένων μπορεί να περιορίζεται από το χρήστη, κεντρικό υπολογιστή ή μια βάση δεδομένων.
* Το μέγεθος του πίνακα και της βάσης δεδομένων είναι σχεδόν απεριόριστο. Απεριόριστες καταχωρήσεις και ευρετήρια ανα πίνακα.

## Υποστηριζόμενοι τύποι δεδομένων
Η PostgreSQL διαθέτει μια ευρεία ποικιλία τύπων δεδομένων. Ο χρήστης έχει την δυνατότητα να προσθέσει ένα νέο τύπο δεδομένων χρησιμοποιώντας την εντολή CREATE TYPE.

## Συναρτήσεις
Ορισμένες από τις συναρτήσεις που υποστηρίζει η PostgreSQL είναι:
* **pg_affected_rows**: Επιστρέφει τον αριθμό των επηρεαζόμενων εγγραφών.
* **pg_cancel_query**: Ακύρωση ασύγχρονου ερωτήματος.
* **pg_client_encoding**: Λήψη της κωδικοποίησης του πελάτη.
* **pg_close**: Κλείνει μια ενεργή σύνδεση.
* **pg_connect**: Ανοίγει μια νέα σύνδεση.
* **pg_connection_busy**: Επιστροφή κατάστασης σύνδεσης αν είναι απασχολημένη ή όχι.
* **pg_connection_reset**: Επαναφορά σύνδεσης.
* **pg_connection_status**: Κατάσταση σύνδεσης.
* **pg_convert**: Μετατροπή αξίας πίνακα σε κατάλληλη για sql ερώτημα.
* **pg_copy_from**: Εισαγωγή εγγραφών από πίνακα σε πίνακα.
* **pg_copy_to**: Αντιγραφή πίνακα σε πίνακα.
* **pg_dbname**: Λήψη του ονόματος της βάσης δεδομένων.
* **pg_delete**: Διαγραφή εγγραφών.
* **pg_end_copy**: Συγχρονισμός με την PostgreSQL backend.
* **pg_execute**: Αποστολή αιτήματος για την εκτέλεση μιας έτοιμης δήλωσης με τις δοθείσες παραμέτρους και αναμένει για το αποτέλεσμα.
* **pg_fetch_result**: Επιστροφή τιμών από πηγή αποτελεσμάτων.
* **pg_field_is_null**: Έλεγχος αν ένα πεδίο είναι κενό.
* **pg_field_name**: Επιστροφή ονόματος πεδίου.
* **pg_field_prtlen**: Επιστροφή τυπωμένου μήκους.
* **pg_field_table**: Επιστροφή ονόματος ή αναγνωριστικού (OID) ενός πεδίου πίνακα.
* **pg_field_type_oid**: Επιστροφή αναγνωριστικού τύπου δεδομένων (OID) για το αντίστοιχο πεδίο.
* **pg_field_type**: Επιστροφή ονομασίας τύπου δεδομένων για το αντίστοιχο πεδίο.
* **pg_free_result**: Απελευθέρωση μνήμης αποτελεσμάτων.
* **pg_get_result**: Επιστροφή αποτελέσματος ασύγχρονου ερωτήματος.
* **pg_host**: Επιστρέφει το όνομα του κεντρικού υπολογιστή της σύνδεσης.
* **pg_last_notice**: Επιστρέφει το τελευταίο μήνυμα ειδοποίησης από τον διακομιστή.
* **pg_lo_close**: Κλείσιμο μεγάλου αντικειμένου.
* **pg_lo_create**: Δημιουργία μεγάλου αντικειμένου.
* **pg_lo_export**: Εξαγωγή μεγάλου αντικειμένου σε αρχείο.
* **pg_lo_import**: Εισαγωγή μεγάλου αντικειμένου από αρχείο.
* **pg_lo_open**: Άνοιγμα ενός μεγάλου αντικειμένου.
* **pg_lo_read_all**: Ανάγνωση μεγάλου αντικειμένου και αποστολή στον browser.
* **pg_lo_read**: Ανάγνωση μεγάλου αντικειμένου.
* **pg_lo_seek**: Αναζήτηση θέσης μέσα σε ένα μεγάλο αντικείμενο.
* **pg_lo_tell**: Επιστρέφει την τρέχουσα θέση ενός μεγάλου αντικειμένου.
* **pg_lo_unlink**: Διαγραφή μεγάλου αντικειμένου.
* **pg_lo_write**: Εγγραφή μεγάλου αντικειμένου.
* **pg_meta_data**: Λήψη μεταδεδομένων πίνακα.
* **pg_num_fields**: Επιστρέφει των αριθμό των πεδίων σε ένα αποτέλεσμα.
* **pg_num_rows**: Επιστρέφει τον αριθμό των εγγραφών σε ένα αποτέλεσμα.
* **pg_options**: Επιλογές που σχετίζονται με την σύνδεση.
* **pg_parameter_status**: Τρέχουσα ρύθμιση παραμέτρων διακομιστή.
* **pg_port**: Επιστρέφει τον αριθμό θύρας (port) που σχετίζεται με την σύνδεση.
* **pg_prepare**: Υποβολή αίτησης για την δημιουργία δήλωσης με τις δεδομένες παραμέτρους.
* **pg_query_params**: Υποβάλλει μια εντολή στον διακομιστή αναμένοντας για το αποτέλεσμα , με την δυνατότητα να περάσετε παραμέτρους μέσω sql κειμένου.
* **pg_query**: Εκτέλεση ενός ερωτήματος.
* **pg_result_error**: Μήνυμα λάθους που σχετίζεται με το αποτέλεσμα.
* **pg_result_status**: Κατάσταση αποτελέσματος ενός ερωτήματος.
* **pg_select**: Επιλογή εγγραφών.
* **pg_send_execute**: Στέλνει ένα αίτημα στον διακομιστή για την εκτέλεση δήλωσης με τις δεδομένες παραμέτρους χωρίς να περιμένει την ολοκλήρωση του.
* **pg_send_prepare**: Στέλνει ένα αίτημα στον διακομιστή για την δημιουργία δήλωσης με τις δεδομένες παραμέτρους χωρίς να περιμένει την ολοκλήρωση του.
* **pg_send_query_params**: Υποβάλλει μια εντολή και διαφορετικές παραμέτρους στον διακομιστή χωρίς να περιμένει για το αποτέλεσμα.
* **pg_send_query**: Αποστέλλει ασύγχρονο ερώτημα.
* **pg_set_client_encoding**: Ρύθμιση κωδικοποίησης πελάτη.
* **pg_set_error_verbosity**: Καθορίζει την ακρίβεια των μηνυμάτων που επιστρέφονται.
* **pg_trace**: Ενεργοποίηση εντοπισμού μιας σύνδεσης.
* **pg_untrace**: Απενεργοποίηση εντοπισμού μιας σύνδεσης.
* **pg_update**: Ενημέρωση πίνακα.
* **pg_version**: Επιστρέφει έναν πίνακα του πελάτη.

## Διαχείριση βάσης δεδομένων
Η Διαχείριση της βάσης δεδομένων γίνεται μέσω του εργαλείου **[[pgAdmin]]** αλλά και με την χρήση εφαρμογών τρίτων όπως **[[PgAccess]]** , **[[PhpPgAdmin]]**, **[[WinSQL]]**. Η Συγκεκριμένη υπηρεσία εγκαθίσταται ταυτόχρονα με την βάση δεδομένων και υποστηρίζεται σε πολλές πλατφόρμες υπολογιστών (Windows, MacOS X, Linux, Solaris, FreeBSD). 

Έχει σχεδιαστεί για να ικανοποιήσει τις ανάγκες των χρηστών , από απλό γράψιμο sql ερωτημάτων έως την ανάπτυξη πολύπλοκων βάσεων δεδομένων. Αρχικά είχε την ονομασία pgManager ενώ από το 1998 ξαναγράφηκε με νέα άδεια χρήσης με την σημερινή ονομασία pgAdmin. Είναι πλήρως γραμμένο στην γλώσσα προγραμματισμού C++ χρησιμοποιώντας τα wxWidgets ώστε να είναι συμβατό με τα κοινά λειτουργικά συστήματα όπως αναφέρθηκαν παραπάνω. Σήμερα είναι διαθέσιμο σε περισσότερες από δώδεκα γλώσσες. 

Η Σύνδεση με την βάση δεδομένων επιτυγχάνεται επιλέγοντας το εικονίδιο “add a connection to a server”. Στην συνέχεια θα πρέπει να εισάγουμε όνομα χρήστη το οποίο είναι “postgre” καθώς και τον κωδικό πρόσβασης που επιλέξαμε κατά την διαδικασία εγκατάστασης. Επιπλέον η σύνδεση στο διακομιστή μπορεί να γίνει με την χρήση του πρωτοκόλλου TCP/IP ή την χρήση Unix Sockets και μπορεί να είναι κρυπτογραφημένη (SSL) για μέγιστη ασφάλεια. 

## Διακεκριμένοι χρήστες
Εκατοντάδες εταιρείες και οργανισμοί χρησιμοποιούν την PostgreSQL για να κατασκευάσουν προϊόντα, ιστοσελίδες και εργαλεία σε διάφορους τομείς όπως

* Ηλεκτρονικό εμπόριο (RedSherriff, Whitepages.com)
* Εκπαίδευση (Πανεπιστημια Σίδνεϊ, Όσλο, Μπέρκλεϊ, Charles (Πράγα), αστρονομικό ινστιτούτο Sternberg (Ρωσία) κ.α.)
* Οικονομία (Journyx Timesheets, Logictree Systems, Trust-Commerce)
* Ψυχαγωγικό Λογισμικό (MobyGames)
* Κυβερνητικές οργανώσεις (Ταμείο Ενωμένων Εθνών για τα παιδιά, οργανισμός των Ηνωμένων Εθνών βιομηχανικής ανάπτυξης, Υπηρεσία διεθνούς ανάπτυξης των Η.Π.Α. κ.α.)
* Υγεία (CalorieKing.com, GNUmed, Shannon Medical Center)
* Βιομηχανία (eXo2.net Corp)
* Μέσα ενημέρωσης (Greenpeace, IMDB.com)
* Τεχνολογία (Apple, Fujitsu, Red Hat, Sun Microsystems)
* Τηλεπικοινωνίες (Skype, Cisco)

## Βραβεία
* 1999 LinuxWorld Editor's Choice Award for Best Database
* 2000 Linux Journal Editors' Choice Awards for Best Database
* 2002 Linux New Media Editors Choice Award for Best Database
* 2003 Linux Journal Editors' Choice Awards for Best Database
* 2004 Linux New Media Award For Best Database
* 2004 Linux Journal Editors' Choice Awards for Best Database
* 2004 ArsTechnica Best Server Application Award
* 2005 Linux Journal Editors' Choice Awards for Best Database
* 2006 Linux Journal Editors' Choice Awards for Best Database
* 2008 Developer.com Product of the Year, Database Tool

## Αναφορές


## Εξωτερικοί σύνδεσμοι

* Επίσημη ιστοσελίδα
* Δίκτυο επέκτασης PostgreSQL

Κατηγορία:Βάσεις δεδομένων
Κατηγορία:Ελεύθερο λογισμικό