Cloudera Manager 서버 기동 시 SqlFileRunner: Exception while executing ddl scripts 와 PSQLException: 오류: 선택된 스키마 없음(영문 ERROR: no schema has been selected to create in) 이 나며 멈췄다. CM 이 CREATE TABLE 을 스키마 한정 없이 실행하는데 접속 계정의 search_path 에 생성 가능한 스키마가 없을 때 나는 DB 쪽 권한 문제다.
public 스키마의 CREATE 권한이 PUBLIC 롤에서 제거됐다. DB 소유자가 아닌 scm 계정은 테이블을 만들 수 없다.public 스키마가 없어졌거나 롤/DB 에 잘못된 search_path 가 박혀 있는 경우도 같은 오류를 낸다.grep -E 'db.host|db.name|db.user|db.type' /etc/cloudera-scm-server/db.properties
\c scm
\dn
SHOW search_path;
SELECT has_schema_privilege(current_user, 'public', 'CREATE');
SELECT r.rolname, d.datname, s.setconfig FROM pg_db_role_setting s
LEFT JOIN pg_roles r ON r.oid = s.setrole LEFT JOIN pg_database d ON d.oid = s.setdatabase;
SELECT version();
has_schema_privilege 가 f 이거나 \dn 에 public 이 없으면 확정이다.
슈퍼유저로 실행한다.
CREATE SCHEMA IF NOT EXISTS public;
ALTER DATABASE scm OWNER TO scm;
ALTER SCHEMA public OWNER TO scm;
GRANT USAGE, CREATE ON SCHEMA public TO scm;
ALTER ROLE scm IN DATABASE scm SET search_path TO public;
systemctl restart cloudera-scm-server
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
upgradeSchema 단계에서 났다면 DDL 이 일부만 적용됐을 수 있다. 업그레이드 전 백업이 있으면 권한을 고친 뒤 복원하고 다시 시도하는 편이 안전하다.