Como escapar de uma citação no comando Postgresql?

1

Estou trabalhando em um script que cria um usuário do Postgres com uma entrada variável de um arquivo de origem. Como o usuário 'root' eu corro o seguinte script:

su - postgres <<'EOF'
. /var.src
psql
CREATE ROLE john;
ALTER USER john WITH PASSWORD '$JOHNPASSWORD';
ALTER ROLE john WITH LOGIN;
CREATE DATABASE john;
ALTER DATABASE john OWNER TO john;
\q
EOF

Estou criando um usuário john e um john de banco de dados, no entanto a senha de john está no var.src. Onde quer que eu olhe, recebo comandos semelhantes a este:

sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"

Substituir a senha por $ JOHNPASSWORD requer um escape, eu suponho. Eu tentei escapar a aspas simples com uma barra invertida, aspas duplas, etc. Nada. Eu não consegui descobrir como posso escapar da aspa simples para que ela possa ler a variável var.src.

Talvez tenha algo a ver com a maneira como estou abordando isso completamente?

    
por KDoe 21.08.2016 / 15:53

1 resposta

0

Eu encontrei algo que ajudou. Eu forneci o comando password alter após o script sair do EOF. Então, aqui está o que funcionou para mim:

    su - postgres <<'EOF'
    . /var.src
    psql
    CREATE ROLE john;
    ALTER ROLE john WITH LOGIN;
    CREATE DATABASE john;
    ALTER DATABASE john OWNER TO john;
    \q
    EOF

    . /var.src
    sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"

Isso porque eu chamei o arquivo variável novamente após o EOF. Tenho certeza de que isso tem a ver com minha suposição anterior de escapar da citação. Mas isso também funciona.

    
por KDoe 21.08.2016 / 20:12