[ホーム] -> [Apache + PHP + PostgreSQL 実験室]

meibo/meibo.sql

ソース

このソースをダウンロードする。

/***************************************************************************
 * 
 * 個人情報検索システム用 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 のスーバーユーザ');
戻る