Я специально не анонсировал выход 9.0.0, потому что предвидел, что не за горами первое исправление 9.0.1, которое наверняка будет содержать устранение ряда ошибок, которые очень мешают жить тем, кто уже поставил себе версию 9.x. Я оказался прав. Таким образом, анонсирую выход 9.0.1 только сейчас...
Как всегда, вы можете скачать версию 9.0.1 с этого сайта. Обратите внимание, что также вышла новая версия ODBC драйвера. Также обратите внимание, что версия для Windows теперь поставляется в вариантах 32-bit и 64-bit.
Наиболее крупные изменения в 9.0.x по сравнению с 8.3.x:
- Механизм "Hot Standby". Позволяет получить актуальную копию БД, доступную только на чтение. Т.е. в этом режиме вы получаете как бы вторую БД, где изменения появляются сразу же после внесения изменения в оригинальную БД.
- Потоковая репликация. Была внедрена, чтобы избавится от сторонних решений репликации и предоставить готовое решение на тему серверов высокой доступности (High Availability). Потоковая репликация соединяет в себе технологии WAL и "Hot Standby", позволяя Standby серверу подключится к master или slave серверу и скачивать с него WAL логи на лету. Таким образом, Standby сервер может выступать в роли как сервера резерва, который содержит актуальную резервную копию продуктивного сервера, так и работающего сервера, принимающего только запросы на чтение к актуальной базе данных. Процесс репликации, тем не менее, является асинхронным и это нужно иметь в виду.
- Более лёгкое управление правами доступа. Теперь для массовых изменений прав доступа доступны GRANT/REVOKE в схемах, а также ALTER DEFAULT PRIVILEGES.
- Анонимные функции (блоки). Анонимные блоки означают возможность вызова функции, написанной на любом из поддерживаемых встроенных языков программирования прямо в командной строке, без объявления самой функции. Например:
DO LANGUAGE plpgsql $$
DECLARE
var record;
BEGIN
FOR vr IN SELECT tablename FROM pg_tables WHERE tableowner = 'marc' AND schemaname NOT IN ('pg_catalog', 'information_schema')
LOOP
EXECUTE 'GRANT SELECT ON ' || vr.tablename || ' TO toto';
END LOOP;
END
$$;
- Вызовы хранимых процедур с именованными параметрами. Скомбинированные с Параметрами По Умолчанию, которые появились в 8.4, именованные параметры позволяют динамический вызов функций с переменным количеством аргументов, как внутри какого-либо языка программирования. Именованные параметры знакомы пользователями MS SQL-сервера или Sybase, но в PostgreSQL эта концепция реализована ещё лучше, поддерживая как вызовы именованных параметров так и перегрузку функций. Например, если синтаксис имён параметров такой:
CREATE FUNCTION test (a int, b text) RETURNS text AS $$
DECLARE
value text;
BEGIN
value := 'a is ' || a::text || ' and b is ' || b;
RETURN value;
END;
$$ LANGUAGE plpgsql;
и до сих пор можно было писать:
SELECT test(1,'foo');
test
-------------------------
a IS 1 AND b IS foo
(1 row)
то теперь можно писать, используя явный синтаксис:
SELECT test( b:='foo', a:=1);
test
-------------------------
a IS 1 AND b IS foo
(1 row)
- Новые оконные функции и возможность сортировки в арггератных функциях.
- И многое другое...
Подробней вы можете почитать на английском здесь.