コメントで、Postgresには型メソッドがないと言われています。
ただし、Postgresは、単一のパラメーターを使用して関数を実行するための属性表記をサポートしています。これは、タイプのメソッドとほぼ同じように見えます。この簡単な例を考えてみましょう。
CREATE OR REPLACE FUNCTION raise10(numeric)
RETURNS numeric LANGUAGE sql AS 'SELECT $1 * 1.1';
電話:
SELECT (100).raise10;
結果:
raise10
---------
110.0
主な制限は、これが単一のパラメーターに対してのみ機能することです。percentage
変数raiseのような追加のパラメーターを渡す方法はありません。
複合型でも同様に機能します。この関連する回答の「計算フィールド」の詳細:
一般的なクエリを列として保存しますか?
これをさらに一歩進めるためUPDATE
に、行でを呼び出して変更を永続化することもできます。
CREATE TABLE employee (
name text PRIMARY KEY,
salary numeric);
INSERT INTO employee VALUES
('foo', 100)
,('bar', 200);
CREATE OR REPLACE FUNCTION giveraise10(employee)
RETURNS numeric AS
$func$
UPDATE employee
SET salary = salary * 1.1 -- constant raise of 10%
WHERE name = ($1).name
RETURNING salary;
$func$ LANGUAGE sql;
電話:
SELECT *, e.giveraise10 FROM employee e;
結果:
name | salary | giveraise10
------+--------+-------------
foo | 100 | 110.0
bar | 200 | 220.0
-> sqlfiddle
は、
のSELECT
pre-UPDATE値を表示しますsalary
が、フィールドは実際に更新されています。
SELECT *, e.giveraise10 FROM employee e;
name | salary
------+--------
foo | 110.0
bar | 220.0
そのようなトリックを使うのが賢明かどうかはあなたが決めることです。テーブルを更新するためのより効率的で透過的な方法があります。