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

portal/portal.sql

ソース

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

/***************************************************************************
 * 
 * ポータルサイト用 DDL
 * 
 * ユーザ関数で、PL/pgSQL を使っているため、コマンドラインから、
 * > createlang plpgsql データベース名
 * の様に実行して PL/pgSQL をデータベースに追加する必要があります。
 * 
 ***************************************************************************/


/*****************************************************
 * 汎用関数の定義
 *****************************************************/
-- 修正日/修正者を更新するトリガプロシージャを作成
DROP FUNCTION p_update_editdata();
CREATE FUNCTION p_update_editdata() RETURNS OPAQUE AS '
    BEGIN
        NEW.editdate := current_timestamp;
        NEW.edituser := current_user;
        RETURN NEW;
    END;
' LANGUAGE 'plpgsql';

/*****************************************************
 * テーブルの作成
 *****************************************************/
-- ユーザマスタの作成
DROP TABLE portal_user;
CREATE TABLE portal_user (
    userid      varchar    (10)   PRIMARY KEY,
    password    varchar    (30)   NOT NULL,
    name        varchar    (30)   NOT NULL,
    email       varchar    (80),
    editdate    timestamp         NOT NULL
        DEFAULT current_timestamp,
    edituser    name              NOT NULL
        DEFAULT current_user
);

-- 修正日/修正者を更新するトリガ
CREATE TRIGGER trg_portal_user_edit BEFORE INSERT OR UPDATE
    ON portal_user FOR EACH ROW EXECUTE PROCEDURE p_update_editdata();


-- USER_BOOKMARKS 用のシーケンスを作成
DROP SEQUENCE seq_user_bookmarks_code;
CREATE SEQUENCE seq_user_bookmarks_code
    INCREMENT    1
    START        1
    CACHE        1;

-- ブックマークテーブルの作成
DROP TABLE user_bookmarks;
CREATE TABLE user_bookmarks (
    code        integer           PRIMARY KEY
        DEFAULT nextval('seq_user_bookmarks_code'),
    name        varchar    (100)  NOT NULL,
    url         varchar    (300),
    userid      varchar    (10)
        REFERENCES portal_user(userid),
    editdate    timestamp         NOT NULL
        DEFAULT current_timestamp,
    edituser    name              NOT NULL
        DEFAULT current_user
);

-- 修正日/修正者を更新するトリガ
CREATE TRIGGER trg_user_bookmarks_edit BEFORE INSERT OR UPDATE
    ON user_bookmarks FOR EACH ROW EXECUTE PROCEDURE p_update_editdata();

-- インデックスを作成
CREATE INDEX idx_user_bookmarks_user
    ON user_bookmarks (name);

/*****************************************************
 * 権限の設定
 *****************************************************/
-- 権限の変更
GRANT SELECT, INSERT, UPDATE, DELETE
    ON portal_user, seq_user_bookmarks_code, user_bookmarks
    TO www;
戻る