What Is New in PostgreSQL 7.3
PostgreSQL 7.3 delivers significant enhancements across query optimization, SQL standard compliance, and overall performance. This release focuses on making the database smarter and more efficient for complex workloads.
| Category | Key Changes |
|---|---|
| New Features | Schema support, SET FROM CURRENT, psql \df command, prepared statement improvements |
| Performance | Better outer join optimization, new GEQO default, improved optimizer statistics |
| SQL Conformance | Full support for SQL92 schema syntax, IS UNKNOWN/IS NOT UNKNOWN |
| Server Settings | New unix_socket_group and unix_socket_permissions parameters |
| Internationalization | Multi-byte support for SUBSTRING(), new locale options |
How did PostgreSQL 7.3 improve query optimization?
The optimizer got significantly smarter at handling complex queries, especially those involving outer joins. It can now flatten subqueries that contain outer joins, turning them into regular joins which execute much faster.
This matters because complex reports and analytical queries often use subqueries with outer joins. The new optimization can reduce execution time from minutes to seconds without requiring any code changes.
The Genetic Query Optimizer (GEQO) also became the default for queries with many joins. In practice, this helps the planner find good execution paths for complex queries faster.
What SQL standard features were added in version 7.3?
Full SQL92 schema syntax support arrived, finally making the CREATE SCHEMA command complete. You can now create schemas and all their contained objects in a single, standard-compliant statement.
The IS UNKNOWN and IS NOT UNKNOWN predicates were implemented for proper three-valued logic handling with NULLs. This brings PostgreSQL's behavior in line with the SQL standard for boolean tests.
Another subtle but useful addition was SET FROM CURRENT for ALTER TABLE. This lets you change a column's default value to whatever it's currently set to, which is handy for schema evolution scripts.
What new administrative controls were introduced?
Socket security got finer control with new unix_socket_group and unix_socket_permissions parameters. You can now specify exactly which group owns the Unix domain socket and what permissions it has.
The psql tool gained the \df command to display function information, making it easier to explore your database's function landscape without writing custom queries.
Prepared statements became more usable with the ability to specify parameter types. This helps avoid type resolution ambiguity and makes prepared statements more reliable for application development.
How did internationalization support improve?
The SUBSTRING() function finally works correctly with multi-byte character sets like UTF-8. Previously, it counted bytes instead of characters, which caused issues with non-ASCII text.
New locale options were added for collation support, making sorting and ordering work better in various languages. This was part of the ongoing effort to make PostgreSQL truly global-ready.
These changes matter for applications serving international users where proper text handling is non-negotiable. The fixed substring behavior prevents data corruption in multi-byte environments.
FAQ
Does PostgreSQL 7.3 handle outer joins better?
Yes, significantly. The optimizer can now flatten subqueries containing outer joins into regular joins, which often results in much faster execution times for complex queries.
Is SQL92 schema syntax fully supported now?
Yes, the CREATE SCHEMA command is finally complete. You can create a schema and all its objects (tables, views, etc.) in a single, standard-compliant statement.
Can I control Unix socket permissions more precisely?
Absolutely. New unix_socket_group and unix_socket_permissions parameters let you specify exactly which group owns the socket and what file permissions it should have.
Does SUBSTRING() work with multi-byte characters now?
Yes, this was fixed. SUBSTRING() now properly handles multi-byte character sets like UTF-8 by counting characters instead of bytes, preventing corruption of non-ASCII text.
What's new with prepared statements?
You can now explicitly specify parameter types when creating prepared statements. This eliminates type resolution ambiguity and makes them more reliable for application use.