[ホーム] -> [Apache + PHP + PostgreSQL 実験室] |
このソースをダウンロードする。
/*************************************************************************** * * 個人情報検索システム用 DDL * * ユーザ関数で、PL/pgSQL を使っているため、コマンドラインから、 * > createlang plpgsql データベース名 * の様に実行して PL/pgSQL をデータベースに追加する必要があります。 * ***************************************************************************/ /***************************************************** * 汎用関数の定義 *****************************************************/ -- 修正日/修正者を更新するトリガプロシージャを作成 DROP FUNCTION m_update_editdata(); CREATE FUNCTION m_update_editdata() RETURNS OPAQUE AS ' BEGIN NEW.editdate := current_timestamp; NEW.edituser := current_user; RETURN NEW; END; ' LANGUAGE 'plpgsql'; /***************************************************** * テーブルの作成 *****************************************************/ -- 職種マスタの作成 DROP TABLE inet_job; CREATE TABLE inet_job ( code smallint PRIMARY KEY, name varchar (10) NOT NULL, editdate timestamp NOT NULL DEFAULT current_timestamp, edituser name NOT NULL DEFAULT current_user ); -- 修正日/修正者を更新するトリガ CREATE TRIGGER trg_inet_job_edit BEFORE INSERT OR UPDATE ON inet_job FOR EACH ROW EXECUTE PROCEDURE m_update_editdata(); -- INET_PROFILE 用のシーケンスを作成 DROP SEQUENCE seq_inet_profile_code; CREATE SEQUENCE seq_inet_profile_code INCREMENT 1 START 1 CACHE 1; -- テーブルの作成 DROP TABLE inet_profile; CREATE TABLE inet_profile ( code integer PRIMARY KEY DEFAULT nextval('seq_inet_profile_code'), name varchar (30) NOT NULL, email varchar (80), pseudonym varchar (30), job smallint REFERENCES inet_job(code), profile varchar (80), editdate timestamp NOT NULL DEFAULT current_timestamp, edituser name NOT NULL DEFAULT current_user ); -- 修正日/修正者を更新するトリガ CREATE TRIGGER trg_inet_profile_edit BEFORE INSERT OR UPDATE ON inet_profile FOR EACH ROW EXECUTE PROCEDURE m_update_editdata(); /***************************************************** * 権限の設定 *****************************************************/ -- 権限の変更 GRANT SELECT, INSERT, UPDATE ON seq_inet_profile_code, inet_profile, inet_job TO www; /***************************************************** * デフォルトデータの登録 *****************************************************/ INSERT INTO inet_job VALUES (11, '会社員'); INSERT INTO inet_job VALUES (21, '自営業'); INSERT INTO inet_job VALUES (31, '教職' ); INSERT INTO inet_job VALUES (41, '学生' ); INSERT INTO inet_job VALUES (99, '無職' ); INSERT INTO inet_job VALUES ( 0, 'その他'); INSERT INTO inet_job VALUES (-1, '秘密' ); /***************************************************** * サンプルデータの登録 *****************************************************/ -- データの追加 INSERT INTO inet_profile (name, job, email, pseudonym, profile) VALUES ('Seigo Arai', 11, 'hizuya@hizlab.net', 'Hizuya Atsuzaki', 'Hiz lab の管理者'); INSERT INTO inet_profile (name, job, email, pseudonym, profile) VALUES ('PgSQL', 0, 'pgsql@fclabs.net', 'PostgreSQL Administrator', 'PostgreSQL のスーバーユーザ');