gwow_dev_renchap=# select version(); version -------------------------------------------------------------------------------------------------------------------- PostgreSQL 8.2.6 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2) (1 row) gwow_dev_renchap=# select get_site_id(); get_site_id ------------- 1 (1 row) gwow_dev_renchap=# \df+ get_default_value; List of functions Schema | Name | Result data type | Argument data types | Owner | Language | Source code | Description --------+-------------------+-----------------------------------+---------------------------------------------------+---------+----------+-----------------------------------------------------------------------------------------------+------------- public | get_default_value | information_schema.character_data | table character varying, column character varying | renchap | sql | SELECT column_default FROM information_schema.columns WHERE table_name=$1 AND column_name=$2; | (1 row) gwow_dev_renchap=# \d zf_categories Table "public.zf_categories" Column | Type | Modifiers ---------------+-----------------------+------------------------------------------------------------ id | integer | not null default nextval('zf_categories_id_seq'::regclass) cat_name | character varying(80) | not null default 'New Category'::character varying disp_position | integer | not null default 0 site_id | integer | Indexes: "zf_categories_pkey" PRIMARY KEY, btree (id) "zf_categories_site_id" btree (site_id) "zf_categories_site_id_idx" btree (site_id) gwow_dev_renchap=# \d z_categories View "public.z_categories" Column | Type | Modifiers ---------------+-----------------------+----------- id | integer | cat_name | character varying(80) | disp_position | integer | View definition: SELECT zf_categories.id, zf_categories.cat_name, zf_categories.disp_position FROM zf_categories WHERE zf_categories.site_id = get_site_id(); Rules: delete_z_categories AS ON DELETE TO z_categories DO INSTEAD DELETE FROM zf_categories WHERE zf_categories.id = old.id AND zf_categories.site_id = get_site_id() insert_z_categories AS ON INSERT TO z_categories DO INSTEAD INSERT INTO zf_categories (site_id, cat_name, disp_position) VALUES (get_site_id(), COALESCE(new.cat_name, get_default_value('zf_categories'::character varying, 'cat_name'::character varying)::character varying), COALESCE(new.disp_position, get_default_value('zf_categories'::character varying, 'disp_position'::character varying)::integer)) update_z_categories AS ON UPDATE TO z_categories DO INSTEAD UPDATE zf_categories SET id = new.id, cat_name = new.cat_name, disp_position = new.disp_position WHERE zf_categories.id = old.id AND zf_categories.site_id = get_site_id() gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 (2 rows) gwow_dev_renchap=# INSERT INTO z_categories (cat_name, disp_position) VALUES ('My Cat', 5); INSERT 0 1 gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 22 | My Cat | 5 | 1 (3 rows) gwow_dev_renchap=# INSERT INTO z_categories (cat_name) VALUES ('My New Cat'); INSERT 0 1 gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 22 | My Cat | 5 | 1 23 | My New Cat | 0 | 1 (4 rows) gwow_dev_renchap=# UPDATE z_categories SET disp_position=2; UPDATE 2 gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 22 | My Cat | 2 | 1 23 | My New Cat | 2 | 1 (4 rows) gwow_dev_renchap=# UPDATE z_categories SET disp_position=2 WHERE id=1; UPDATE 0 gwow_dev_renchap=# SELECT * FROM z_categories ORDER BY id; id | cat_name | disp_position ----+------------+--------------- 22 | My Cat | 2 23 | My New Cat | 2 (2 rows) gwow_dev_renchap=# DELETE FROM z_categories WHERE id = 23; DELETE 1 gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 22 | My Cat | 2 | 1 (3 rows) gwow_dev_renchap=# DELETE FROM z_categories; DELETE 1 gwow_dev_renchap=# SELECT * FROM zf_categories ORDER BY id; id | cat_name | disp_position | site_id ----+---------------+---------------+--------- 1 | Test category | 1 | 2 2 | new cat 3 | 0 | 2 (2 rows)