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

bash
$ # 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
database.js
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

Comandos.sql
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