Postgres 민감한 데이터베이스 이름 권한에 대한 큰따옴표 문제 내부의 큰따옴표

Postgres 민감한 데이터베이스 이름 권한에 대한 큰따옴표 문제 내부의 큰따옴표

MyDb와 같이 대소문자를 구분하는 이름을 가진 데이터베이스가 있는 경우

psql을 사용하여 이 데이터베이스에 대한 모든 권한을 'user' 사용자에게 부여하려면 다음과 같이 작성하면 됩니다.

GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;

효과가있다.

하지만 쉘 스크립트를 사용하고 싶다면 어떻게 해야 할까요?

다음 명령을 실행합니다.

su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""

다음과 같은 오류로 인해 실패합니다.ERROR: database "mydb" does not exist

답변1

작은따옴표를 사용할 수 있습니다.

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 MyDb      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 

$ su - postgres -c 'psql -c "grant all privileges on database \"MyDb\" to user;"'  
GRANT

그러나 작은따옴표 안에 변수를 사용하는 경우 변수가 확장되지 않으므로 주의하세요. 귀하의 특별한 경우에는 괜찮습니다.

편집하다: DB 이름이 대소문자를 구분함을 나타내기 위해 요청 내에서 큰따옴표를 이스케이프해야 PostGres에 올바르게 전달됩니다.

관련 정보