""" 建立 tenant_role_rights 表 """ import psycopg2 conn = psycopg2.connect( host="10.1.0.20", port=5433, database="hr_portal", user="admin", password="DC1qaz2wsx" ) conn.autocommit = False cur = conn.cursor() try: print("Creating tenant_role_rights table...") cur.execute(""" CREATE TABLE IF NOT EXISTS tenant_role_rights ( id SERIAL PRIMARY KEY, role_id INTEGER NOT NULL REFERENCES tenant_user_roles(id) ON DELETE CASCADE, function_id INTEGER NOT NULL REFERENCES system_functions_cache(id) ON DELETE CASCADE, can_read BOOLEAN NOT NULL DEFAULT FALSE, can_create BOOLEAN NOT NULL DEFAULT FALSE, can_update BOOLEAN NOT NULL DEFAULT FALSE, can_delete BOOLEAN NOT NULL DEFAULT FALSE, is_active BOOLEAN NOT NULL DEFAULT TRUE, edit_by VARCHAR(100), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT uq_role_function UNIQUE (role_id, function_id) ); """) # 建立索引 cur.execute(""" CREATE INDEX IF NOT EXISTS idx_role_rights_role ON tenant_role_rights(role_id); """) cur.execute(""" CREATE INDEX IF NOT EXISTS idx_role_rights_function ON tenant_role_rights(function_id); """) conn.commit() print("SUCCESS: tenant_role_rights table created") # 驗證 cur.execute(""" SELECT table_name FROM information_schema.tables WHERE table_name = 'tenant_role_rights'; """) result = cur.fetchone() if result: print(f"Verified: {result[0]} table exists") # 查看表結構 cur.execute(""" SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'tenant_role_rights' ORDER BY ordinal_position; """) columns = cur.fetchall() print("\nTable structure:") for col in columns: print(f" {col[0]:<20} {col[1]}") else: print("ERROR: Table not found after creation") except Exception as e: conn.rollback() print(f"ERROR: {e}") import traceback traceback.print_exc() finally: cur.close() conn.close()