CREATE TABLE IF NOT EXISTS lw_laws(id UUID DEFAULT gen_random_uuid() PRIMARY KEY,law_id TEXT UNIQUE NOT NULL,law_num TEXT,law_name TEXT NOT NULL,law_name_kana TEXT,category TEXT,products TEXT[] DEFAULT '{}',law_type TEXT,promulgation_date TEXT,total_articles INTEGER DEFAULT 0,raw_xml_size INTEGER DEFAULT 0,fetched_at TIMESTAMPTZ DEFAULT NOW(),updated_at TIMESTAMPTZ DEFAULT NOW());
CREATE TABLE IF NOT EXISTS lw_articles(id UUID DEFAULT gen_random_uuid() PRIMARY KEY,law_id TEXT NOT NULL REFERENCES lw_laws(law_id) ON DELETE CASCADE,part_num TEXT,part_title TEXT,chapter_num TEXT,chapter_title TEXT,section_num TEXT,section_title TEXT,subsection_num TEXT,subsection_title TEXT,article_num TEXT NOT NULL,article_caption TEXT,full_text TEXT NOT NULL,sort_order INTEGER DEFAULT 0,created_at TIMESTAMPTZ DEFAULT NOW());
CREATE TABLE IF NOT EXISTS lw_suppl(id UUID DEFAULT gen_random_uuid() PRIMARY KEY,law_id TEXT NOT NULL REFERENCES lw_laws(law_id) ON DELETE CASCADE,suppl_label TEXT,article_num TEXT,full_text TEXT NOT NULL,sort_order INTEGER DEFAULT 0,created_at TIMESTAMPTZ DEFAULT NOW());
CREATE INDEX IF NOT EXISTS idx_lw_articles_law ON lw_articles(law_id);
CREATE INDEX IF NOT EXISTS idx_lw_articles_art ON lw_articles(law_id,article_num);
CREATE INDEX IF NOT EXISTS idx_lw_articles_text ON lw_articles USING GIN(to_tsvector('simple',full_text));
CREATE INDEX IF NOT EXISTS idx_lw_suppl_law ON lw_suppl(law_id);
ALTER TABLE lw_laws ENABLE ROW LEVEL SECURITY;
ALTER TABLE lw_articles ENABLE ROW LEVEL SECURITY;
ALTER TABLE lw_suppl ENABLE ROW LEVEL SECURITY;
CREATE POLICY "lw_laws_read" ON lw_laws FOR SELECT USING(true);
CREATE POLICY "lw_articles_read" ON lw_articles FOR SELECT USING(true);
CREATE POLICY "lw_suppl_read" ON lw_suppl FOR SELECT USING(true);
SQL② 書込ポリシー削除(セキュリティ修正)
前回全権限で作成した場合のみ実行
DROP POLICY IF EXISTS "lw_laws_public_read" ON lw_laws;
DROP POLICY IF EXISTS "lw_laws_public_insert" ON lw_laws;
DROP POLICY IF EXISTS "lw_laws_public_update" ON lw_laws;
DROP POLICY IF EXISTS "lw_laws_public_delete" ON lw_laws;
DROP POLICY IF EXISTS "lw_articles_public_read" ON lw_articles;
DROP POLICY IF EXISTS "lw_articles_public_insert" ON lw_articles;
DROP POLICY IF EXISTS "lw_articles_public_delete" ON lw_articles;
DROP POLICY IF EXISTS "lw_suppl_public_read" ON lw_suppl;
DROP POLICY IF EXISTS "lw_suppl_public_insert" ON lw_suppl;
DROP POLICY IF EXISTS "lw_suppl_public_delete" ON lw_suppl;
CREATE POLICY IF NOT EXISTS "lw_laws_read" ON lw_laws FOR SELECT USING(true);
CREATE POLICY IF NOT EXISTS "lw_articles_read" ON lw_articles FOR SELECT USING(true);
CREATE POLICY IF NOT EXISTS "lw_suppl_read" ON lw_suppl FOR SELECT USING(true);