문제:
CREATE ROLE 문을 사용하여 PostgreSQL 역할을 생성하면 오류가 발생합니다. 역할이 이미 존재하는 경우. 존재하지 않는 경우에만 역할을 어떻게 생성합니까?
해결책:
PL/pgSQL 코드 블록과 함께 DO 문을 사용하여 역할 생성을 수행합니다. 조건부:
DO $do$ BEGIN IF EXISTS ( SELECT FROM pg_catalog.pg_roles WHERE rolname = 'my_user') THEN RAISE NOTICE 'Role "my_user" already exists. Skipping.'; ELSE CREATE ROLE my_user LOGIN PASSWORD 'my_password'; END IF; END $do$;
최적화:
잠재적인 경쟁 조건과 성능 오버헤드를 방지하려면 예외 처리 메커니즘 내에서 중첩 블록을 사용하는 것을 고려하세요.
DO $do$ BEGIN IF EXISTS ( SELECT FROM pg_catalog.pg_roles WHERE rolname = 'my_user') THEN RAISE NOTICE 'Role "my_user" already exists. Skipping.'; ELSE BEGIN -- nested block CREATE ROLE my_user LOGIN PASSWORD 'my_password'; EXCEPTION WHEN duplicate_object THEN RAISE NOTICE 'Role "my_user" was just created by a concurrent transaction. Skipping.'; END; END IF; END $do$;
위 내용은 아직 존재하지 않는 경우에만 PostgreSQL 역할을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!