PL/pgSQLを使う方法

PL/pgSQLを使おうと思って日本PostgreSQLユーザー会さんのページで関数言語の追加の方法(createlang)を見ながら作業をしたのですが、なぜかできませんでした。ぐぐってみると本家MLのアーカイブぴったりの回答がありました。
つまり、psqlで入るPostgreSQLのシェルの中ではなく、unixのシェルでcreatelangをすべきでした。
SQL命令のリファレンスではなくコマンドリファレンスページだったことに気づくべきでした…。
ちなみに、やりたかったことはフォーリンキーを含むテーブルを作成するときに、カラムの初期値を外部参照されているIDではなく名前で設定したいというものです。以下サンプル。もっと賢いやり方があれば嬉しいです。

CREATE FUNCTION get_id_from_product_image_type(varchar(128)) RETURNS INTEGER AS '
DECLARE
    pit_name ALIAS FOR $1;
    ret_val INTEGER;
BEGIN
    SELECT INTO ret_val pit.id FROM product_image_type AS pit WHERE pit.name=pit_name;
    RETURN ret_val;
END;
' LANGUAGE 'plpgsql';

CREATE TABLE product_image_type (
    id SERIAL,
    name varchar(128),
    PRIMARY KEY (id)
);

INSERT INTO product_image_type (name) VALUES ('primary');
INSERT INTO product_image_type (name) VALUES ('other');
INSERT INTO product_image_type (name) VALUES ('front');
INSERT INTO product_image_type (name) VALUES ('back');


CREATE TABLE product_image (
    id SERIAL,
    name varchar(128),
    -- type_id int DEFAULT '2',
    type_id int DEFAULT get_id_from_product_image_type('other'),
    PRIMARY KEY (id),
    FOREIGN KEY (type_id) REFERENCES product_image_type (id)
);

INSERT INTO product_image (name) VALUES ('image1');
INSERT INTO product_image (name, type_id)
    SELECT 'image2', pit.id
    FROM product_image_type AS pit
    WHERE pit.name='other';
INSERT INTO product_image (name, type_id)
    SELECT 'image3', pit.id
    FROM product_image_type AS pit
    WHERE pit.name='primary';