-- 1) 如果没有就创建应用用户 DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'appuser') THEN CREATE ROLE appuser LOGIN PASSWORD 'changeme'; END IF; END $$; -- 2) 如果没有就创建数据库(顶层语句,不能放在 DO/事务里) SELECT 'CREATE DATABASE appdb ENCODING ''UTF8'' TEMPLATE template0 ' || 'LC_COLLATE ''en_US.UTF-8'' LC_CTYPE ''en_US.UTF-8'';' WHERE NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'appdb') \gexec -- 3) 设定库所有者/权限(无论是否新建都可安全执行) ALTER DATABASE appdb OWNER TO appuser; GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser; -- 4) 进入 appdb,配置 schema 与默认权限(可选但常用) \connect appdb GRANT ALL ON SCHEMA public TO appuser; ALTER SCHEMA public OWNER TO appuser; -- 让以后在 public 里新建的对象默认给 appuser 权限(可按需保留) ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO appuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO appuser;