Ir para o conteúdo principal

Definições / Particularidades do PostgreSQL

Serviço/Processo no Windows

Para iniciar o banco de dados deve-se ser iniciado o serviço do postgres no gerenciador de serviços do Windows, ou configurá-lo como automático.

image-1656358069653.png

Para cada seção no banco ou thread é criado um registro postgres.exe no gerenciador de tarefas, este comportamento é normal, assim que as seções forem encerradas, o processo também será finalizado.

image-1656358102391.png

Cada PID do sistema operacional Windows poderá ser localizado dentro do banco de dados e sua seção monitorada.

Tuplas

Este é o tipo de dado da coluna do sistema, o identificador de tupla é um par (número do bloco, índice da tupla dentro do bloco) que identifica a posição física da linha dentro de sua tabela.

Transações - Locks e Bloqueios

Os Locks podem ser definidos como bloqueios executados em objetos ou dados no banco de dados. Esses bloqueios podem ser gerados automaticamente (em função do gerenciamento Multiversão/Multiusuário (MVCC) do PostgreSQL) e manualmente (com comandos ou operações que necessitem “travar” uma tabela ou alguns de seus registros).

O PostgreSQL trabalha com diversos tipos ou modos de bloqueios diretamente vinculados a ações específicas ao programa para controlar o acesso simultâneo aos dados e tabelas. 

Bloqueio Descrição Entra em conflito com
ACCESS SHARE O comando SELECT obtém um bloqueio deste modo nas tabelas referenciadas. Em geral, qualquer comando que apenas leia a tabela (sem modificá-la) obtém este modo de bloqueio. ACCESS EXCLUSIVE
ROW SHARE O comando SELECT FOR UPDATE obtém o bloqueio neste modo na(s) tabela(s) de destino. EXCLUSIVE e ACCESS EXCLUSIVE
ROW EXCLUSIVE Os comandos UPDATE, DELETE e INSERT obtêm este modo de bloqueio na tabela de destino (além do modo de bloqueio ACCESS SHARE nas outras tabelas referenciadas). Em geral, este modo de bloqueio é obtido por todos os comandos que modificam os dados da tabela. SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE
SHARE UPDATE EXCLUSIVE Obtida pelo comando VACUUM (sem a opção FULL). Protege a tabela contra mudanças simultâneas no esquema durante a execução do comando VACUUM SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE e ACCESS EXCLUSIVE.
SHARE Obtido pelo comando CREATE INDEX. ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE e ACCESS EXCLUSIVE.
SHARE ROW EXCLUSIVE Este modo de bloqueio não é obtido automaticamente por nenhum comando do PostgreSQL. ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE e ACCESS EXCLUSIVE
EXCLUSIVE Este modo de bloqueio não é obtido automaticamente por nenhum comando do PostgreSQL. ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE e ACCESS EXCLUSIVE.
ACCESS EXCLUSIVE Obtido pelos comandos ALTER TABLE, DROP TABLE e VACUUM FULL. Este é também o modo de bloqueio padrão para o comando LOCK TABLE sem a especificação explícita do modo. Entra em conflito com todos os modos de bloqueio Este modo garante que a transação que o obteve seja a única que esteja acessando a tabela.

**Para ver o tipo de deadlock utilize o dashboard do pgAdmin 4 e vá até a coluna locks ou utilize o comando:

SELECT * 
  FROM PG_LOCKS