Pronto, finalmente consegui resolver. Acho que o problema era multilinha e apenas falta de familiaridade com o dotenv para o meu ambiente de desenvolvimento local.
Consegui fazer tudo funcionar com meu código assim. Ele também funcionou com o fs.readFileSync(), mas eu não queria confirmar isso no meu controle de origem.
const { Pool } = require('pg')
const fs = require('fs')
const pgPool = new Pool({
user: process.env.PGUSER,
password: process.env.PGPASSWORD,
host: process.env.PGHOST,
database: process.env.PGDATABASE,
port: process.env.PGPORT,
ssl: {
rejectUnauthorized: true,
// ca: fs.readFileSync(
// `${process.cwd()}/cert/ca-certificate.crt`.toString()
// ),
ca: process.env.CA_CERT,
},
})
.on('connect', () => {
console.log('connected to the database!')
})
.on('error', (err) => {
console.log('error connecting to database ', err)
})
Agora no meu config.env eu tive que fazer com que ficasse assim:
CA_CERT="-----BEGIN CERTIFICATE-----\nVALUES HERE WITH NO SPACES AND A \n
AFTER EACH LINE\n-----END CERTIFICATE-----"
Eu tive que mantê-lo como uma string de linha única para que funcionasse. Mas eu estava finalmente para me conectar com
{rejectUnauthorized:true}
Para a variável de ambiente da plataforma digital ocean app, copiei tudo, incluindo as aspas duplas, e colei lá. Parece funcionar muito bem. Eu não acho que você poderá ter essa configuração definida como verdadeira com o banco de dados de desenvolvimento de US $ 7. Eu tive que atualizar para o gerenciado para encontrar qualquer certificado CA para download.