Do not speak Portuguese? Translate this site with Google or Bing Translator
Error Postgresql Read Only

Posted on: July 25, 2022 02:51 PM

Posted by: Renato

Views: 82

"Read-Only" Mode for PostgreSQL

- https://www.timescale.com/blog/scalable-postgresql-high-availability-read-scalability-streaming-replication-fb95023e2af/

Modo "Somente leitura" para PostgreSQL

Normalmente, quando se discute ter conexões “somente leitura” com um banco de dados PostgreSQL , é no contexto de conectar-se a uma réplica .

Há uma variedade de métodos disponíveis para rotear conexões com consultas somente leitura conhecidas (ou seja, consultas com SELECTinstruções... que não estão chamando VOLATILEfunções que modificam dados). Isso inclui software de proxy de conexão como o Pgpool-II ou mecanismos de estrutura como o roteador de banco de dados do Django .

No entanto, há situações em que você pode precisar forçar conexões somente leitura para sua instância primária (leitura-gravação) do Postgres. Alguns exemplos incluem colocar seu aplicativo em um estado degradado para executar uma movimentação ou atualização do banco de dados ou permitir que um administrador inspecione um sistema que pode estar acumulando logs de gravação antecipada que rastreiam todas as alterações no sistema.

O PostgreSQL tem uma chamada de parâmetro de configuração default_transaction_read_only. A configuração default_transaction_read_onlyglobal para onforça todas as conexões a não permitir gravações no banco de dados. default_transaction_read_onlyé um parâmetro recarregável, portanto, você não precisa reiniciar sua instância do Postgres para usá-lo.

Aqui está um exemplo rápido de como default_transaction_read_onlyfunciona. Primeiro, certifique-se de que seu sistema não tenha default_transaction_read_onlydefinido:

postgres=# SHOW default_transaction_read_only ;   default_transaction_read_only -------------------------------  off (1 row)  postgres=# CREATE TABLE IF NOT EXISTS abc (id int); INSERT INTO abc VALUES (1) RETURNING id; CREATE TABLE   id ----  1 (1 row)  INSERT 0 1 

Isso funciona como esperado: podemos criar uma tabela e inserir dados. Agora vamos colocar o sistema em default_transaction_read_onlymodo (observe que estou executando isso no PostgreSQL 14 )

ALTER SYSTEM SET default_transaction_read_only TO on; SELECT pg_reload_conf(); SHOW default_transaction_read_only; 

Certifique-se de que default_transaction_read_onlyestá ativado:

postgres=# SHOW default_transaction_read_only;   default_transaction_read_only -------------------------------  on (1 row) 

Agora verifique se as gravações não são permitidas:

postgres=# INSERT INTO abc VALUES (2) RETURNING id; ERROR: cannot execute INSERT in a read-only transaction 

Excelente!

Observe que default_transaction_read_onlynão é uma panacéia: existem algumas advertências que você deve estar ciente.

Primeiro, default_transaction_read_onlypode ser substituído em uma sessão, mesmo que o valor seja definido em todo o banco de dados. Por exemplo:

postgres=# SHOW default_transaction_read_only ;  default_transaction_read_only -------------------------------  on (1 row)  postgres=# SET default_transaction_read_only TO off; SET  postgres=# INSERT INTO abc VALUES (2) RETURNING id;   id ----  2 (1 row)  INSERT 0 1 

Em segundo lugar, ao utilizar default_transaction_read_onlycom um aplicativo, você também deve garantir que seu aplicativo possa ser configurado para enviar apenas consultas de leitura ao banco de dados, garantindo uma experiência de usuário tranquila.

Dito isso, se você tiver uma situação em que precisa colocar uma instância primária do PostgreSQL em um modo “somente leitura” temporariamente, você pode usar default_transaction_read_onlypara evitar transações de gravação.


2

Share
About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (12) Variados (108) PHP (102) Laravel (110) Black Hat (3) front-end (24) linux (82) postgresql (34) Docker (12) rest (4) soap (1) webservice (5) October (1) CMS (2) node (6) backend (10) ubuntu (38) devops (21) nodejs (4) npm (1) nvm (0) git (3) firefox (1) react (6) reactnative (5) collections (1) javascript (4) reactjs (7) yarn (0) adb (1) solid (0) blade (2) models (1) controllers (0) log (0) html (2) hardware (2) aws (14) Transcribe (2) transcription (1) google (3) ibm (1) nuance (1) PHP Swoole (4) mysql (22) macox (2) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (1) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (13) faceapp (1) eloquent (11) query (2) sql (35) ddd (3) nginx (6) apache (4) certbot (1) lets-encrypt (2) debian (9) liquid (1) magento (1) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (1) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (2) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (1) binaural (1) mysqli (3) database (32) windows (2) vala (1) json (2) oracle (1) mariadb (2) dev (12) webdev (23) s3 (4) storage (1) kitematic (1) gnome (2) web (1) intel (1) piada (1) cron (2) dba (12) lumen (1) ffmpeg (1) android (2) aplicativo (1) fedora (2) shell (3) bash (2) script (2) lider (1) htm (1) csv (1) dropbox (1) db (2) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (0) biologia (1) programming (20) performance (1) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (1) microg (1) iode (1) ssh (1) zsh (1) terminal (1) dracula (1) spaceship (1) mac (1) idiomas (1) laptop (1) developer (24) api (1) data (1) matematica (1) seguranca (2) 100DaysOfCode (5) hotfix (1) documentation (1) laravel (1) RabbitMQ (1) Elasticsearch (1) redis (1) Raspberry (3) Padrao de design (3) JQuery (0) angularjs (2) Dicas (7) kubenetes (1) vscode (1) backup (1) angular (1) servers (2) pipelines (1) AppSec (1) DevSecOps (2) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (1) security (1) translate (1) kube (1) iot (1) politica (1) bolsonaro (1) flow (1) podcast (1) Brasil (1)

New Articles



Get Latest Updates by Email