Postgres-XC 1.1 Documentation
Prev | Up | Appendix E. Release Notes | Next

# E.5. Release 1.1

> Release Date: 2013-07-04

This release contains new feature in and a variety of fixes in 1.1.

## E.5.1. Migration to Version 1.1

A dump/restore is not required for those running 1.0.X.

## E.5.2. Overview

Postgres-XC 1.0 is a symetric (multi-master, read and write-scalable) shared-nothing cluster based on PostgreSQL. This release version is based on PostgreSQL 9.2.

Currently the only architectures supported are 64 bit Linux operating systems.

This release of Postgres-XC is the second major release and contains the following features, characteristics and enhancements.

- Support and extensions for existing features of PostgreSQL in a cluster-wide environment.

- SQL extensions and functionalities exclusive to Postgres-XC for management and operations related to a cluster, which add a node-level granularity for cluster operations.

- Creation of Global Transaction Manager (GTM), which is a centralized component providing cluster-wide Multi-version Concurrency Control (MVCC).

- Creation of mechanisms exclusive to Postgres-XC and enhancements of existing internal mechanisms of PostgreSQL, which are related to connection pooling, global transaction management, query planning, rewriting, analyzing and execution.

- Add/remove nodes while Postgres-XC cluster is in operation.

- Basic Postgres-XC configuration and operation tool.

- Restrictions related to existing features in PostgreSQL and currently not supported by Postgres-XC.

The above items are explained in more detail in the sections below.

The original overall architecture and design of Postgres-XC is by Koichi Suzuki, Mason Sharp, Pavan Deolasee, Andrei Martsinchyk and Michael Paquier. Koichi Suzuki is the original project lead.

Core member at the time Version 1.1 is released is Koichi Suzuki, Ashutosh Bapat, Ababs Butt, Amit Khandaker, Ahsan Hadi, Takayuki Suto, Tetsuo Sakata, Masaki Hisada and Hitoshi Hemmi.

## E.5.3. New Features

- Node addition and removal while Postgres-XC cluster is in operation.

- Added `--restoremode` option to pg_ctl to import catalog information from other coordinator/datanode, used when adding new node. By Koichi Suzuki and Abbas Butt

- Added `--include-nodes` option to pg_dump and pg_dumpall to export node information as well. Mainly for node addition. By Abbas Butt.

  Done by improving initdb, pg_dump/pg_dumpall and new function `pgxc_lock_for_backup()`, by Abbas Butt and Amit Khandekar.

- `pgxc_lock_for_backup()` function to disable DDLs while new node is going to be added and catalog is exported to the new node. By Abbas Butt.

- Row TRIGGER support. By Amit Khandelar and Ashutosh Bapat

- RETURNING support. By Abbas Butt and Ashutosh Bapat

- pgxc_ctl tool for Postgres-XC cluster configuration and operation (contrib module). By Koichi Suzuki

- Added `-U` and `-d` option in pgxc_monitor, by Koichi Suzuki

- Added `\d+` to print table distribution info in psql, by Ashutosh Bapat and Benny.

- Added `-C` option to gtm_ctl to specify selected gtm control file at the start. By Koichi Suzuki.

- pgxc_monitor (contrib module), by Koichi Suzuki.

## E.5.4. Improvements

- Improve error handling of statements which runs outside a transaction block. By Amit Khandekar.

- Push down sorting operation to the datanodes by using `ORDER BY` clause in queries to sent to the datanodes. With this push-down, sort keys should be shippable. By Ashutosh Bapat.

- Push down `LIMIT` clause to datanodes, by Ashutosh Bapat.

- Pushdown outer joins to datanodes, by Ashutosh Bapat.

- Improve fast query shipping to ship queries containing subqueries, by Ashutosh Bapat

- `ALTER TABLE` statement to redistribute tables. By Michael Paquier and Ashutosh Bapat

- Push `GROUP BY` clause to the datanodes when there is `ORDER BY`, `LIMIT` and other clauses in the query. By Ashutosh Bapat.

- Initdb improved so that created coordinator or datanode can start with any value of GXID. Needed for node addition. By Amit Khandekar.

- Backup gtm restart point when `CREATE BARRIER` is issued. By Koichi Suzuki. Reviewd by Pavan Deolasee and Nikhin Sontakke.

- Refactoring GTM message level to optimize the amount of log lines. By Koichi Suzuki

- Merge and hash join at coordinators, by Ashutosh Bapat.

- Use distributed sorting for merge join and grouping at coordinator, by Ashutosh Bapat

- Now GTM headers are in installation directory, by Michael Paquier.

- Merge with PostgreSQL 9.2. By Michael Paquier, Satoshi Nagayasu, Koichi Suzuki, Takayuki Suto, Abbas Butt, Ashutosh Bapat and Amit Khandekar.

- Refactor Postgres-XC planner to use RemoteQuery paths for scanning relations (joins or plain) at the datanodes. Move Postgres-xc specific planner files to the corresponding directory with other planner related files in PostgreSQL.

- Many many code refactoring and tweaks in coordinator/datanode. By Michael Paquier, Amit Khandaker and Abbas Butt.

- Refactoring pgbench, by Michael Paquier.

## E.5.5. Interface changes

- `Execute Direct` statement syntax changed as `EXECUTE DIRECT ON (nodename ...)`

- postgres startup option `-X` and `-C` are now `--datanode` and `--coordinator` respectively.

- `REPLICATION`, `MODULO`, `HASH`, `ROUND` and `ROBIN` were removed from keywords.

## E.5.6. Bug Fixes

- Sequence removal on GTM when database is dropped, by Michael Paquier.

- `ORDER BY` query plan correction, by Michael Paquier.

- Fix `INSERT SELECT` for replicated tables, by Michael Paquier.

- Push `-l` option from gtm_ctl to gtm, by Michael Paquier.

- Fix for regressions, by Michael Paquier, Takayuki Suto, Koichi Suzuki, Abbas Butt, Ashutosh Bapat and Amit Khandaker.

- pgxc_ctl status fix, by Michael Paquier.

- `COPY` for partially distributed tables, by Michael Paquier.

- Fix wrong reference in GTM standby, by Andrei Martsinchyk.

- Fix GTM thread to manage thread backup, by Andrei Martsinchyk.

- Release GTM thread lock before exit, by Andrei Martsinchyk.

- Block GXID generation on standbys, by Andrei Martsinchyk.

- Change `gtm.control` file format into text, by Michael Paquier.

- Fix command ID handling/communication to datanode, by Michael Paquier and Abbas Butt.

- Block write operations on Datanode when not accessed from Coordinator, by Michael Paquier.

- Block `EXECUTE DIRECT` from datanodes, by Michael Paquier.

- Correct query generation of COPY with quoted table names, by Nikhil Sontakke.

- Fix race condition in GXID generation for autovacuum wraparound, by Michael Paquier.

- Fix parameter building in SPI calls, by Michael Paquier.

- Get consistent sequence dump value with pg_dump, by Michael Paquier.

- Fix current value of sequence to be consistent with vanilla PostgreSQL, by Nikhil Sontakke.

- Fix race condition in GXID generation for autovacuum wraparound, by Michael Paquier.

- Allow primary node data modification with `ALTER NODE`, by Michael Paquier.

- Fix crash when `COPY` involves relation with no locator data, by Nikhil Sontakke and Michael Paquier.

- Fix `COPY` query expression with quoted column names, by Nikhil Sontakke.

- Fix coordinator/datanode slave crash at long run, by Koichi Suzuki.

- Fix default value of port for both gtm and gtm_proxy, by Koichi Suzuki.

- Fix `--status` option for gtm_ctl, by Koichi Suzuki.

- Fix DMLs on replicated tables, by Abbas Butt.

- Fix the case gtm_proxy does not reconnect or crash, by Koichi Suzuki

- Fix to restart promoted gtm as the master, by Nikhill Sontakke.

- Improve node registration to gtm, by Koichi Suzuki.

- Improve gtm_ctl belavior with `-l` option, by Koichi Suzuki

- Allow `xc_maintenance_mode` to use DML in execute direct and direct connection to datanodes, by Koichi Suzuki

- Fix gtm_ctl start behavior with -w option, by Nikhil Sontakke.

- Fix of occasional gtm slave crash, by Nikhil Sontakke.

- Fix memory context usage in gtm, by Nikhill Sontakke.

- Fix `copy` command with table name qualified by a schema name, by Nikhil Sontakke.

- Fix `pgxc_advisory_lock` to succeed when the lock can be acquired or it is already held by the same transaction.

- Fix `get_next` of the sequence, by Nikhil Sontakke.

- Fix sequence backup to gtm slave, by Andrei Martsinchyk.

- Fix incorrect disconnect handling in GTM Proxy, by Andrei Martsinchyk.

- Fix message level related to `BARRIER`, by Koichi Suzuki. Reviewd by Michael Paquier and Nikhil Sontakke.

- Fix potential memory leak at coordinator part of GTM, by Andrei Martsinchyk.

- Fix calculation of gxid range in MSG_TXN_BEGIN_GETGXID_MULTI message handling in GTM, by Nikhil Sontakke.

- Fix 1024 limitation of sequence defined in GTM. By Andrei Martsinchyk.

## E.5.7. Restrictions

- `SERIALIZABLE` and `REPEATABLE READ` transaction isolation modes are not supported.

- Only constraints which can be enforced only locally to a datanode are supported. For example, UNIQUE constraints for non-distribute column is not supported in distributed tables.

- Using complicated statement in `PREPARE` steatement may not be supported (depends upon specific statement).

- Row triggers do not work with `COPY`.

- Privilege to views may not work correctly.

- `COPY TO` from replicated table does not work.

- Quoted cast may not work. For example, `select "my table".*::"my table" from "my table";` does not work. Use `select row("my table".*) from "my table";` instead.

- SQL functions containing utility statement may not work.

- DML cannot be used in plpgsql functions.

- `CREATE TABLE AS EXECUTE` is not supported.

- `WHERE CURRENT OF` is not supported.

- In cursors, `MOVE BACKWARD` works only if `SCROLL` is used in the cursor.

- `WITH HOLD` cursors are not supported.

- Foreign Data Wrapper is not supported. Following related SQL statements are not supported.

  `CREATE FOREIGN DATA WRAPPER`, `ALTER FOREIGN DATA WRAPPER`, `DROP FOREIGN DATA WRAPPER`, `CREATE FOREIGN TABLE`, `ALTER FOREIGN TABLE`, `DROP FOREING TABLE`, `CREATE SERVER`, `ALTER SERVER`, `DROP SERVER`, `CREATE USER MAPPING`, `ALTER USER MAPPING`, `DROP USER MAPPING`.

- Savepoint is not supported. Following related SQL statements are not supported.

  `SAVEPOINT`, `RELEASE SAVEPOINT` and `ROLLBACK TO SAVEPOINT`.

- `LISTEN`, `UNLISTEN` and `NOTIFY` work only locally at a coordinator.

- SECURITY LABEL is not supported.

- Exception block in plpgsql is not available because SAVEPOINT is not supported.

- Distribution key of a table cannot be updated.

- Statistics are not collected globally. These statistic data are maintained locally to each node.

- BARRIERs do not have timeout, meaning if a 2PC transaction is stuck forever, barrier will be stuck too.

- `CREATE TABLE SELECT` statement will cause error if `SELECT` statement involves aggregate functions such that its transition function returns different type of row from the final row.

## E.5.8. Issues

- Regression test may have random failure. You can run the regression again to see if the test is successful.

- The following regression fails: int4, point, create_index, inherit, constraints, join, aggregates, privileges, window and plpgsql.

  These failusres are not Postgres-XC bugs. They are caused by the difference of the nature of Postgres-XC from PostgreSQL, for example, order of the selected rows, difference in planners (PGXC plan is based upon distributed query processing planning), and so on.

  They will be fixed in the beta period.

Prev | Home | Next
Release 1.0 | Up | Additional Supplied Modules