0
리눅스 환경에서 perl 스크립트 (createRole.pl)를 사용하여 postgresql 데이터베이스에서 새 역할을 만들려고합니다. initdb 명령의 결과로 존재하는 기존 역할 (Role1)이 있습니다.perl 스크립트를 사용하여 postgresql 대소 문자를 구분하는 데이터베이스 역할을 만드는 방법
이제 DB 마이그레이션과 psql 명령을 사용하지 않고 새 역할을 만들려고합니다. 역할 이름과 암호가 모두 설정되기를 원하기 때문입니다.
[[email protected] bin]# ./psql -p 1234 dbname -U Role1 -e -c "CREATE ROLE \"Role2\" WITH SUPERUSER LOGIN PASSWORD 'password';"
Password for user Role1:
CREATE ROLE "Role2" WITH SUPERUSER LOGIN PASSWORD 'password';
CREATE ROLE
: 배시 쉘 (단말)에서
, (이 방법은 Role1 암호를 묻는) 이렇게 psql의 명령을 사용하여 (적절한 상부 케이스와 함께) 새로운 역할을 생성 할 수있다 그러나이 같은 펄 스크립트를 통해 작동하지 않습니다 내가 외부 따옴표의 다양한 조합을 시도하고 아무 소용이 내부 작은 따옴표와 큰 따옴표를 탈출use strict:
my $dbCreateRole = '$newDBdir/bin/psql -A -p 1234 dbname -U Role1 -q -c "CREATE ROLE \"Role2\" WITH SUPERUSER CREATEDB CREATEROLE REPLICATION LOGIN PASSWORD \'password\';"';
if ($whoami eq 'root') {
$dbCreateRole =~ s/\"/\\\"/g;
$dbCreateRole = "su $appropriateUser -c \"$dbCreateRole\"";
}
system("export PGPASSWORD=password 2> /dev/null");
system("$dbCreateRole 2> /dev/null") == 0 || die("Unable to create Role2 database role.\n");
.
모든 의견을 환영합니다.
Expect 및 명령 줄 유틸리티 대신 DBI 만 사용하는 것이 좋습니다. – ThisSuitIsBlackNot
DBI를 반영하여 답을 수정했습니다. –