Situação bastante obscura e algumas horas tentando coisas diferentes sem sorte.
Eu tenho um script bash que restaura um backup de banco de dados de produção localmente. Parte do script executa algum SQL para definir coisas no banco de dados.
Um desses itens é definir o correto slack_token
em uma slack_details
tabela. Aqui está como eu executo o script bash:
$ ./restore-prod-database.sh -t "xoxb-1234567-1234....."
O script tem uma linha que aciona a execução de um arquivo .sql como este:
psql -h $DATABASE_HOST -d $DATABASE_NAME -a -v slack_token=$SLACK_TOKEN -f restore-populate-slack-details.sql
Finalmente, o SQL faz algo assim:
UPDATE slack_details
SET installation = jsonb_set(installation, '{bot,token}', ('"' || :slack_token ||'"')::jsonb)
WHERE id = 1;
Não importa o que eu tente, seja concatenando o :slack_token com aspas, passando-o com aspas, usando aspas simples e "Recebo o seguinte erro:
ATUALIZAÇÃO slack_details SET instalação = jsonb_set(instalação, '{bot,token}', ('"' || :slack_token ||'"')::jsonb) WHERE id = 1; psql:restore-populate-slack-details.sql:61: ERRO: a coluna "xoxb" não existe LINHA 2: ... = jsonb_set(instalação, '{bot,token}', ('"' || xoxb- 12345...
Nota rápida, a instalação é uma coluna jsonb e o código a seguir funciona bem, no momento em que uso a variável -v não funciona:
UPDATE slack_details
SET installation = jsonb_set(installation, '{bot,token}', ('"' || '123456' ||'"')::jsonb)
WHERE id = 1; --- works fine