PostgreSQL 9.1에서는 간단한 CREATE를 사용하여 역할 생성 역할이 이미 존재하는 경우 ROLE 문이 실패할 수 있습니다. 이는 이러한 시나리오를 적절하게 처리하는 것이 중요한 자동화된 스크립트에서 문제가 될 수 있습니다.
이러한 상황에서 오류를 방지하려면 다음이 필요합니다. 스크립트에 조건부 확인을 추가합니다. 안타깝게도 PostgreSQL의 일반 SQL에서는 IF 문이 지원되지 않습니다.
해결책은 제어 흐름을 제공하는 PL/pgSQL을 사용하는 데 있습니다. 능력. 다음 스크립트는 PL/pgSQL을 사용하여 조건부로 역할을 생성하는 방법을 보여줍니다.
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$;
경합 조건 처리에 대한 대체 접근 방식 예외 처리와 함께 중첩 블록을 사용하는 것입니다. 내부 블록 내에 CREATE ROLE 문을 중첩하면 잠재적인 중복 역할 생성으로 인해 발생한 예외를 포착할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!