Postgres имеет функцию version()
, однако major_vesion()
отсутствует. Предполагая, что выходная строка всегда содержит номер версии как number(s).number(s).number(s)
, вы можете написать свою собственную обертку как:
CREATE OR REPLACE FUNCTION major_version() RETURNS smallint
AS $BODY$
SELECT substring(version() from $$(\d+)\.\d+\.\d+$$)::smallint;
$BODY$ LANGUAGE SQL;
Пример:
=> Select major_version();
major_version
---------------
9
(1 row)
Однако реальная проблема заключается в том, что AFAIK вы не можете выполнить ваши команды условно в «чистом» SQL, и лучшее, что вы можете сделать, это написать какую-нибудь хранимую функцию, подобную этой:
CREATE OR REPLACE FUNCTION conditionalInvoke() RETURNS void
AS $BODY$
BEGIN
IF major_version() = 9 THEN
ALTER DATABASE postgres SET bytea_output='escape';
END IF;
RETURN;
END;
$BODY$ LANGUAGE plpgsql;
Я думаю, что вам лучше использовать некоторый язык сценариев и генерировать соответствующий SQL с ним.