PostgreSQL 8.4 Λίστα Χαρακτηριστικών

Κάθε νέα έκδοση της PostgreSQL έχει περισσότερα χαρακτηριστικά από τις προηγούμενες χάρη στη συνεχώς αυξανόμενη κοινότητα από contributors. Η Έκδοση 8.4 περιλαμβάνει 293 βελτιώσεις, οι οποίες αφορούν από υλοποιήσεις νέας λειτουργικότητας που περιλαμβάνουν εκατοντάδες γραμμές κώδικα (όπως Windowing Functions) μέχρι μικρά patch που διευκολύνουν τη ζωή των διαχειριστών (όπως βελτιωμένη εμφάνιση στηλών στο psql). Λόγω του όγκου των βελτιώσεων δεν μπορούμε εδώ να τις περιγράψουμε όλες, αλλά μπορούμε να απαριθμήσουμε αρκετές απο αυτές.

Για μια ακόμη πιο περιεκτική μορφή, ανατρέξτε στο feature matrix (Αγγλικά μόνο).

Περιεχόμενα

  SQL
  Διαχείριση
  Ασφάλεια και Συνδέσεις
  Παρακολούθηση
  Επιδόσεις
  Διαδικασίες
  Άλλα χαρακτηριστικά για Developers
  Εργαλεία
  Βελτιώσεις psql
  Νέες Built-in Functions

Σημείωση στα Additional Modules

Μερικά από τα χαρακτηριστικά που περιγράφονται παρακάτω εγκαθίστανται μαζί με τον πυρήνα του κώδικα της PostgreSQL, τα λεγόμενα όμως "Additional Modules" δεν εγκαθίστανται εξαρχής, αλλά μπορούν προαιρετικά να εγκατασταθούν χρησιμοποιώντας One-Click installer, RPM packages, ή τον πηγαίο κώδικα. Ιστορικά, αυτά ονομάζονται "contrib" ή "contrib modules." Χαρακτηριστικά που αποτελουν Additional Modules σημειώνονται με (AM).

SQL

Με κάθε νέα έκδοση, η PostgreSQL υλοποιεί περισσότερα χαρακτηριστικά βασισμένα στα πρότυπα ANSI SQL καθώς και non-standard επεκτάσεις που επιτρέπουν στους χρήστες να εκτελούν εύκολα ακόμα περισσότερες πολύπλοκες εργασίες.

Windowing Functions
Γνωστές και ως "windowing aggregates," αυτές οι function επιτρέπουν aggregate διαδικασίες όπως count, sum, και rank, να εφαρμόζονται σε υποσύνολο των δεδομένων, και χωρίς grouping output rows. Αυτό σημαίνει ότι αναφορές πολλών επίπεδων που απαιτούσαν 3 ή 4 query (και πιθανόν procedural κώδικα) τώρα μπορούν να γίνουν με ένα query. Επίσης με αυτόν τον τρόπο επεκτείνεται ο αριθμός των Business Intelligence εφαρμογών που μπορεί να υποστηρίξει η PostgreSQL.
Common Table Expressions & Recursive Queries
Τα CTE επιτρέπουν στους χρήστες να δημιουργούν "named subqueries" και να τα χρησιμοποιούν σε διάφορα σημεία του query που τα περιέχει. Επιπλέον εξαλείφουν την ανάγκη δημιουργίας temp table για ορισμένες λειτουργίες, η πιο εντυπωσιακή χρήση των CTE αφορά τα recursive query, μέσω των οποίων μπορούμε να διατρέξουμε ένα δένδρο ή μια δομή εγγράφου με ένα μόνο query. Αποτελεί μια πολύ χρήσιμη λειτουργία για πολλές εφαρμογές που έχουν δεδομένα σε μορφή δένδρου, οπως forums, file managers, και org charts.
ALTER SEQUENCE RESTART και TRUNCATE TABLE RESTART IDENTITY
Πιο εύκολη και ασφαλής εκκίνηση της αυτόματης αρίθμησης των sequences από το 1 όταν αλλάζουμε αντικείμενα στην database ή όταν αδειάζουμε έναν πίνακα
ALTER VIEW add column
Επιτρέπει να προσθέτουμε στήλες σε ένα υπάρχον view (στο τέλος), χωρίς να χρειάζεται να κάνουμε rebuild τα view dependencies. Για αλλαγές στηλών ή αφαίρεση τους εξακολουθεί να απαιτείται dependency rebuild.
ALTER VIEW rather than ALTER TABLE to act on views
Για ιστορικούς λογούς, χρησιμοποιούσαμε ALTER TABLE για να μετατρέψουμε VIEWS. αυτο διορθώθηκε με τη δημιουργία ενός "ALTER VIEW" statement.
ALTER DATABASE / SET TABLESPACE
Αυτή η εντολή μετακινεί πινάκες ή indexes από το προηγούμενο default tablespace σε νέο. Σημειώστε ότι οι πινάκες και τα indexes που δεν βρίσκονται σε default tablespace δεν επηρεάζονται.
LIMIT (expression ή subquery)
Πλέον μπορούμε να βάλουμε LIMIT στον αριθμό των εγγραφών που επιστρέφονται από ένα query χρησιμοποιώντας calculated expression, ή ακόμα και subquery, σε αντίθεση με την παλιότερη απαίτηση για σταθερά. Αυτό κάνει εύκολο ενα VIEW ή μια stored procedure να υποστηρίζει πολλαπλές δυναμικές εμφανίσεις δεδομένων σε υποσύνολα (σελίδες)
Προαιρετική χρήση του "AS" keyword
Όπως ορίζει το SQL specification, η χρήση του "AS" keyword ως column alias είναι πλέον προαιρετική. Αυτό βοηθάει και χρήστες που προέρχονται απο τη MySQL.
Χειρισμός SQL Standard Interval
Επεκτείνοντας το ήδη πλούσιο σύνολο από non-standard interval-handling operators και functions, η 8.4 περιλαμβάνει υποστήριξη για SQL Standard interval year-month intervals (like '1-2') και day-time intervals (like "select interval '1' day").
Εντολή TABLE
Η εντολή "TABLE tablename" είναι ισοδύναμη με "SELECT * FROM tablename," όπως και στο SQL standard.

Administration

Η Έκδοση 8.4 υλοποιεί ενα πλήθος απο αιτήματα χρηστών και νέες ιδέες που κάνουν τη διαχείριση της PostgreSQL ευκολότερη.

Database-level Collations
Character collations (ή κανόνες με τους οποίους ταξινομούνται τα πράγματα) Είναι πλέον χαρακτηριστικό των βάσεων δεδομένων και όχι χαρακτηριστικό της εγκατάστασης που ήταν πριν. Αυτό επιτρέπει την ταυτόχρονη χρήση πολλών γλωσσών στην ίδια εγκατάσταση PostgreSQL, καθώς ανοίγει και το δρόμο για per-column collations σε επόμενες εκδόσεις της PostgreSQL.
Visibility Map
Πρόκειται για ένα νέο register που καταγράφει data pages οι οποίες "μολύνονται" απο πολλαπλά transactions. Το σημαντικό είναι ότι επιτρέπει στο VACUUM να διαβάζει μόνο τα data pages που όντως χρειάζονται vaccuming και όχι όλο τον πίνακα, προσφέροντας μεγάλη μείωση του απαιτούμενου VACCUMing σε μεγάλους πίνακες. Επίσης ανοίγει το δρόμο για μελλοντική index-only χρήση σε πίνακες με μικρή συχνότητα ανανέωσης των δεδομένων τους.
Auto-Tuning Free Space Map
Θυμάστε την ρύθμιση max_fsm_pages ; Τελικά έφυγε. To Free Space Map πλέον αποθηκεύεται στον δίσκο, όχι στην shared memory, το οποίο σημαίνει οτι πάντα βλέπει όλο τον ελεύθερο χώρο στους πίνακες και τους αλλάζει το μέγεθος δυναμικά.
Autovacuum table configuration με χρίση ALTER TABLE / SET
Πλέον δεν χρειάζεται να κάνουμε UPDATE τον πινάκα συστήματος pg_autovacuum system για να αλλάξουμε τις ανα πίνακα ρυθμίσεις για autovacuum, μπορούμε να χρησιμοποιούμε ALTER TABLE, εντολή πολύ πιο φιλική στον χρήστη. Ως μπόνους, οι τιμές που θέτουμε αποθηκεύονται κατά το pg_dump.
Warm Standby Usability
Αρκετές τροποποιήσεις και βελτιώσεις καθιστούν πιο εύκολο το στήσιμο, τη διαχείριση και την ανάκτηση των βάσεων δεδομένων Warm Standby. Αν το χρησιμοποιείτε ήδη το πιθανότερο είναι ότι θα προτιμήσετε αυτή την νέα εξορισμού συμπεριφορά του, ελέγξτε όμως ξανά την τεκμηρίωση για αλλαγές στο API.
pg_conf_load_time() function
Δεν θα χρειαστεί ποτέ να μαντέψετε πότε έγινε η τελευταία αλλαγή στο postgresql.conf αρχείο από την τελευταία επανεκκίνηση του server: μπορείτε να συγκρίνετε την ημερομηνία τροποποίησης του αρχείου με το αποτέλεσμα της εντολής pg_conf_load_time().
Deadlocked Query Display
Όχι άλλη δουλειά ντετέκτιβ για να εντοπίσετε ποιές διαδικασίες έχουν επέλθει σε αδιέξοδο, η πληροφορία πλέον υπάρχει.
O pg_settings πλέον δείχνει τις διαθέσιμες επιλογές
Πολλές ρυθμίσεις δέχονται μια λίστα απο δυνητικές τιμές. Ο πίνακας συστήματος pg_settings τώρα δείχνει αυτή τη λίστα για γρήγορη αναφορά κατά την εκτέλεση.
Multi-column GIN Indexes
Τα GIN indexes, χρησιμοποιούνται για προηγμένο indexing όπως αυτό σε arrays και full text search, πλέον μπορούν να δημιουργηθούν και να καλύπτουν πολλές στήλες ταυτόχρονα, αποσύροντας την απαίτηση για concatinate πριν το indexing.
ON TRUNCATE Triggers
Οι διαχειριστές πλέον μπορούν να δημιουργούν triggers που ενεργοποιούνται (per statement) όταν κάποιος πινάκας γίνει TRUNCATE. Αυτό επιτρέπει trigger-based replication systems (οπως το Slony-I και το Londiste) να υποστηρίξουν την εντολή TRUNCATE.
pg_terminate_backend()
Αυτή η administration function επιτρέπει τον ασφαλή τερματισμό "idle in transaction" sessions από την γραμμή εντολών ή απο scripts, εξαλείφοντας περιστατικά που δημιουργούνται απο "κρεμασμένες" client εφαρμογές.

Security & Connections

Η PostgreSQL είναι "η πιο ασφαλής εξορισμού" και μέρος αυτού ειναι οτι καθιστά εύκολη την χρήση των εργαλείων ασφαλείας. Η 8.4 κανει την χρήση του connection και το έλεγχο πρόσβασης πιο ευέλικτο και κατανοητό.

Column-Level Permissions
Πλέον υπάρχει η δυνατότητα για απόδοση δικαιωμάτων (SELECT, UPDATE) σε μεμονωμένες στήλες όπως επίσης και σε ολόκληρους πινάκες.
SSL Authentication
Οι χρήστες πιστοποιούν την ταυτότητά τους με χρηση SSL certificates και οι διαχειριστές μπορούν να ορίζουν access control για μεμονωμένα SSL certificates.
TRUNCATE Privilege
Οι διαχειριστές μπορούν πλέον να περιορίσουν τους χρήστες όσο αφορά την χρήση της TRUNCATE καθώς και να διαχειρίζονται την δυνατότητα για UPDATE και DELETE μεμονωμένων εγγράφων.
pg_hba.conf Name=Value Syntax
Makes all authentication options use one consistent syntax for their specific settings, and pg_hba.conf access-control files vastly more intuitively understandable. However, this change breaks backwards-compatibility: users of LDAP, PAM and Ident authentication will need to re-write their configuration files.
pg_hba.conf Usermaps
Επιτρέπει την χρήση ενός αρχείου mapping το οποίο ελέγχει πιο shell ή δικτυακός χρήστης συνδέεται με ποιόν database χρήστη, για όλους τους τύπους πιστοποίησης ταυτότητας με την παλιότερη δυνατότητα που αφορούσε μόνο την μέθοδο IDENT.
Check pg_hba.conf on Reload
Αυτόματος έλεγχος του αρχείου access control πριν την προσπάθεια επανεκκίνησης του server, προλαμβάνοντας ατυχήματα μη εκκίνησης λόγω λαθών κατά την τροποποίηση του αρχείου.

Monitoring

H 8.4 προσθέτει αρκετά νεα χαρακτηριστικά και εργαλεία για monitoring κάνοντας την PostgreSQL πιο φιλική σε μεγάλα εταιρικά περιβάλλοντα

pg_stat_statements (AM)
Allows real-time monitoring of summary query statistics, letting you see at a glance which of your normalized queries is executing the most often and using the most system time. pg_stat_statement will speed up the process of "bad query" troubleshooting by an order of magnitude.
auto_explain (AM)
Lets you automatically log select EXPLAIN plans to the PostgreSQL log for later analysis. Will help a great deal with troubleshooting slow stored procedures, as well as queries which perform differently between production and testing. Also allows logging of EXPLAIN plans for nested statements, that is, statements executed from within a function.
pg_stat_user_functions
This system view tracks how many times each of your functions is accessed, as well as aggregate execution times spent both inside the function and on nested function calls. Administrators of stored procedure applications will now be able to definitively identify their slowest procedures.
New Dtrace / SystemTap Probes
43 new probes make tracing your server in real time to know what's happening inside the database engine and operating system even more informative and powerful.

Επιδόσεις

"Η PostgreSQL συνεχίζει να βελτιώνει τις επιδόσεις σε κάθε σημαντική έκδοση. Η 8.4 έχει προσθέσει αρκετές βελτιστοποιήσεις, οπος semi-joins και anti-joins, οι οποίες παρέχουν δραματική μείωση στον χρόνο εκτέλεσης μερικών από τα πιο απαιτητικά query μας" είπε ο Kevin Grittner, Wisconsin Court System.

Hash Methods for DISTINCT/UNION/INTERSECT/EXCEPTION queries
Previously, operations like DISTINCT would require Postgres to sort and then eliminate data to achieve the distinct results. Now PostgreSQL can use hash based methods (similar to those used for GROUP BY) to achieve these results. This should make many of these queries much faster without needing any changes. Note, however, that these kinds of queries will no longer produce sorted output without an ORDER BY clause.
Semi-Joins and Anti-Joins
This refactor of how we handle folding subqueries into the main query, such as IN() and EXISTS() clauses, now reliably chooses the best execution method for semantically equivalent subqueries rather than requiring the user to experiment with different query syntax. It should accelerate existing complex reporting queries by executing them more intelligently.
Improved Hash Indexes
PostgreSQL's hash indexes now locate single rows faster than B-Tree indexes, and have become useful for indexing ID fields in some databases. However, the 8.4 implementation of hash indexes has some data recovery limitations which will be corrected in later versions.
Cursor_tuple_fraction GUC
This setting tells the planner what fraction of a cursors results you expect to return for a given cursor query. This allows the planner to use plans that are more optimal, based on estimated percentage of rows you expect to return.
default_statistics_target and column statistics changes
After extensive testing, we've raised the default statistics sample size to 100 for planner statistics, which makes a better compromise between the statistics needed by simple queries and complex ones. To support large data warehouses, we've also raised the upper limit of statistics to 10,000.
Partial Match support for Full Text Search
In addition to searching large bodies of text for word matches, full text search can now match the beginnings of words. This does require upgrading users to rebuild their GIN indexes.
Improved Statistics for Full Text Search
The query planner now estimates selectivity of your full text searches more intelligently, so you get better query plans and often faster text search queries. Produced by a Google Summer of Code project.
EXPLAIN VERBOSE column level output
This used to expose internal data that only a handful of people were able to benefit from reading. It's now telling you useful things such as which columns each node outputs to its parent, which will show you how bad SELECT * is.
pgstat File Optimizaion
The pgstat file tracks usage statistics in your database, and can generate a lot of I/O. 8.4 both reduces usage of this file, and makes relocatable, so you can put it on a faster disk resource or ramdrive. This will be a performance boon to small databases with high data write volume.

Procedures

Πολλοί PostgreSQL developers χρησιμοποιούν την PostgreSQL όχι μόνο ως βάση δεδομένων, αλλά και ως ένα ολοκληρωμένο middleware περιβάλλον ανάπτυξης. Αυτές οι επεκτάσεις στην stored procedure λειτουργικότητα κάνουν δυνατή την υλοποίηση ακόμα πιο εκλεπτυσμένης business λογικής μέσα στην βάση δεδομένων.

Variadic Parameters
As a PostgreSQL-only feature, users can now create stored procedures and functions with a variable number of arguments. This makes it easier and more natural to write stored procedures in interpreted languages (Perl, Python, Ruby, PHP, Tcl). It also helps with change management of stored procedure based applications.
Default Parameters
Permits definition of default values for stored procedure parameters not supplied by the user. This makes stored procedure change management, and porting database applications from SQL Server and Sybase, significantly easier.
CASE Control Structure in PL/pgSQL
No more IF .. ELSIF .. ELSIF .. ELSIF in PL/pgSQL; we now have a proper switched CASE statement, which allows you to execute code based on comparing a value with a list of conditions.
HINT, DETAIL, and SQLSTATE in RAISE command for PL/pgSQL
Output additional error information for easier debugging of PL/pgSQL stored procedures, or enhanced error control in your application.
RETURNS TABLE for PL/pgSQL functions
A SQL-standard shortcut for RETURNS SETOF tabletype or complex OUT parameters. Makes it faster to write stored procedures which behave like tables, returning a rowset.
RETURN QUERY EXECUTE support in PL/pgSQL
Makes it simpler to then return results from that query, by removing the requirement to loop over the result set.
EXECUTE USING for PL/pgSQL
Creates a new call syntax for PL/pgSQL functions calling other functions, which is similar to "placeholder" syntax for external languages. This eliminates quoting steps which were previously needed for EXECUTE.
Call Set-Returning Functions in the SELECT Clause
Allows you to call functions which return rows in the SELECT clause as well as the FROM clause, which is handy when you want to call a function on the results of another function, e.g.: SELECT g(y) FROM (SELECT f(x) FROM t) as sub(y);

Άλλα χαρακτηριστικά για Developers

Καμμιά έκδοση της PostgreSQL δεν μπορεί να είναι ολοκληρωμένη χωρίς μερικά εξελιγμένα χαρακτηριστικά για application developers.

Foreign Data Wrapper support
Paving the way to a full implementation of the SQL/MED (Management of External Data) standard in the next version, it's now possible to register foreign server and users mapping, enhancing remote procedure calls security when using cross-database connection tools like dblink.
Case Insensitive Text Data Type (AM)
This allows matching queries to match text whether it's UPPER case or lower case, which comes in very handy when managing emails for example. This does require you to use the "citext" data type.
B-Tree GIN Implementation (AM)
Primarily as a demonstration of GIN index implementation, this module offers a B-Tree-on-GIN index example.

Εργαλεία

Δεν είναι δυνατή η χρήση μιας παραγωγικής βάσης δεδομένων χωρίς εργαλεία διαχείρισης και ελέγχου. H νέα έκδοση προσθέτει ένα σημαντικό αριθμό νέων εργαλείων και βελτιώνει αρκετά άλλα.

Parallel Restore
pg_restore can now be run in parallel process mode, loading data and creating database objects in several parallel streams. Depending on your hardware and database design, this allows restore of database backup files two to eight times faster than single-process restore. 8.4's parallel restore can also be used to restore 8.3 or 8.2 databases.
pg_Migrator (external tool)
This beta tool allows in-place upgrade of databases from 8.3 to 8.4, without the downtime of dump and reload. Currently has some limitations around full text indexing and certain Additional Modules. This is a separate project on pgFoundry; download it there.
pgBench with Timed Execution (AM)
You can now ask pgBench, our default micro-benchmark, how much PostgreSQL can do in a known amount of time, rather than how much time it'll take to do a set amount of transactions. This makes it more intuitive to compare results between runs or between servers.

Βελτιώσεις psql

Το πιο δημοφιλές interface της PostgreSQL ειναι το command-line shell, psql, πιθανόν επειδή διαθέτει τόσα πολλά χαρακτηριστικά που επιτρέπουν στους χρήστες να διαχειρίζονται τις βάσεις δεδομένων τους τόσο γρήγορα όσο μπορούν να γράψουν. Η Εκδοσή 8.4 έρχεται μαζί με μια πληθώρα βελτιώσεων στο psql.

Version-Awareness
8.4's psql will be backwards-compatible with several earlier versions of PostgreSQL, including the informational commands. This will allow users to upgrade to the latest version of psql without worrying about having full features with older servers.
Function Editor
\ef will bring up a special function editor with placeholders for the parts of a function, making it simple to maintain functions directly in psql rather than needing to use text files.
Table, Database, Tablespace Size Display
Using \dt+ and \l will now tell you how much your disk space objects use.
Display Referencing Tables in \dt+
Knowing what foreign keys are pointing to the table you're seeing comes in handy!
Improved handling of long lines and tab characters in psql
Line wrapping and tabs are no longer a chronic annoyance in the psql shell, but behave the way most users expect.
Improved Function Listing
Functions now clearly show when they are regular, windowing or aggregate functions so that you know how to use them.
\timing (on | off)
The \timing switch which allows checking execution times is now scriptable with on and off parameters.
Remove System Objects from \dX Commands
The \d commands now hide built-in system objects by default, allowing you to just browse user-created database objects.

Νέες Built-in Functions

Ένα απο τα πράγματα που κάνουν την PostgreSQL κάτι περισσότερο απο βάση δεδομένων ειναι η τεράστια βάση απο built-in functions που εκτελούν μαθηματικές, στατιστικές, xml, array, timestamp και χειρισμού κειμένου διαδικασίες. Σε κάθε έκδοση προσθέτουμε μερικές ακόμα, Η έκδοση 8.4 δεν αποτελεί εξαίρεση

Time based generate_series() Functions
generate_series() is the swiss-army knife of SQL looping tricks, and now can loop between two dates rather than just two integers.
generate_subscripts() Function
Allows for easier array traversal. You used to be able to do this with generate_series and array_upper and array_lower, but this new version should be easier to use and faster as well.
quote_nullable()
Quotes and escapes strings in a way which is automatically suitable for inclusion in an EXECUTE SQL string. Particularly, it quotes NULL strings as "NULL".
suppress_redundent_updates() Trigger
This carefully coded C trigger will detect when a tuple being UPDATEd didn't change at all, and when it's the case, it'll stop PostgreSQL from executing any other trigger. This allow your application to stop optimizing UPDATEs when you have costly triggers (or trigger based replication), as the system will do it for you.
array_agg() Function
This aggregate accumulates all of the values in a column into an array, functionality which is useful both for passing arrays to applications for processing, and for formatting lists of data for display.
unnest() Function
Now that you've accumulated rows into a single array, you want to do the reverse, that is seeing each element of an array as a single row. Unnest() is the standard function name for doing just that.