Postgres
O PostgreSQL (ou simplesmente Postgres) é um banco de dados relacional de código aberto, muito poderoso e amplamente usado por empresas e desenvolvedores.
PSQL é um client de linha de comando para se conectar com o serviço postgres de banco de dados.
No postgres cada conexão aberta deve estar atrelada a um banco de dados (diferente do mysql).
A views pg_stat_activity e pg_stat_database, são uma especie de tabelas padrão de onde é possivel puxar informações estatisticas (stat) como conexões aberta no banco de dados.
Instalar e configurar postgres - PSQL
$ # INSTALAÇÃO NO CLIENTE
$ sudo apt update
$ sudo apt install postgresql-client # Instala apenas o serviço de cliente
$ psql --host=localhost --username=postgres --port=5432 # Se conecta ao postgres
$ # INSTALAÇÃO NO SERVIDOR
$ sudo -u postgres psql # Entra na linha de comando
$ CREATE ROLE usuario WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'senha'; # Criando um super usuário
$ CREATE DATABASE basededados WITH OWNER usuario; # Criando a base de dados
$ GRANT ALL PRIVILEGES ON DATABASE basededados TO usuario; # Dando permissões
$ \q # Saindo
$ sudo systemctl restart postgresql
import { Client } from "pg";
async function query(queryObject) {
const client = new Client({
// Usa dotenv para pegar essas variáveis de ambiente
user: process.env.POSTGRES_USER,
host: process.env.POSTGRES_HOST,
database: process.env.POSTGRES_DB,
password: process.env.POSTGRES_PASSWORD,
port: process.env.POSTGRES_PORT,
// O acesso será feito SEM SSL em desevolvimento pois muito bancos não suportam
ssl: getSSLValues(),
});
//sem o Try... toda vez que uma consulta der errado ficará uma conexão aberta.
try {
await client.connect();
const result = await client.query(queryObject);
return result;
} catch (error) {
console.log(error);
throw error;
} finally {
await client.end();
}
}
export default {
query: query,
};
function getSSLValues() {
// Verifica se tem a variavel de Ambiente para usar certificado SSL privado
if (process.env.POSTGRES_CA) {
console.log(process.env.POSTGRES_CA);
return {
// rejectUnauthorized: false, // Permite certificados autoassinados (inseguro para produção)
ca: process.env.POSTGRES_CA,
};
}
// Verifica se é produção para usar SSL
return process.env.NODE_ENV === "development" ? false : true;
}
Arquivo de conexão com banco de dados em .js
SHOW server_version; -- Mostra a versão do Banco de dados
SHOW max_connections; -- Mostra a quantidade de conexões permitidas
SELECT * FROM pg_stat_activity; -- Exibe todos os campos de estatísticas do banco em tempo real
SELECT * FROM pg_stat_activity WHERE datname = 'postgres'; -- Apenas no meu banco
"SELECT count(*)::int FROM pg_stat_activity WHERE datname='postgres';" -- numero de linhas em inteiro
Type Casting é uma conversão de tipo permitida no banco como: ::int