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)
然而真正的問題是,據我所知,你can't在「純有條件地執行你的命令「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;
我認爲你應該使用索姆e腳本語言並使用它生成適當的SQL。
感謝您的洞察力。我們正在使用PHP並有條件地執行語句。我認爲直接在PGSQL中執行會更容易,所以我可以減少PHP安裝程序腳本,但是,我認爲你已經回答了我的問題,這是我的夢想:) – hakre
這並不總是奏效:我目前有'9.1rc1'和'9.2devel'。 ;-) –
我試圖決定什麼是最穩定的,可能是這樣的東西?:'SELECT substring(version()from $$ PostgreSQL(\ d +)\。\ d + $$);' – isaaclw