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에 올바르게 전달됩니다.