Adicionar 'Uso de Postgres como backend de dados do Plone'

master
parent
commit
e462320d66
  1. 71
      Uso-de-Postgres-como-backend-de-dados-do-Plone.md

71
Uso-de-Postgres-como-backend-de-dados-do-Plone.md

@ -0,0 +1,71 @@
# Postgres e Plone
Esta documentação é para guardar informações sobre o uso de Postgres com Plone. Foi feita para avaliar o seu uso como backend de dados, para o Portal Modelo 4.
Para esta análise, usou-se o site descrevendo as imagens Docker do Plone 6: https://6.docs.plone.org/install/containers/examples/nginx-volto-plone-postgresql.html
## Relstorage
É um componente python que permite o uso de bancos relacionais com o Plone, não apenas Postgres.
Documentação: https://relstorage.readthedocs.io/en/latest/configure-application.html
No container backend do Plone: https://6.docs.plone.org/install/containers/images/backend.html#relational-database-variables
## Formato dos dados
As tabelas mais importantes, até onde vi, são:
- `object_state`: guarda os estados de todos os objetos. **EM FORMATO PICKLE**, isto é, de difícil leitura.
- `current_object`: aponta pro estado atual do objeto, em `object_state`.
- `transaction`: mostra as operações feitas (criação de página, etc).
Como teste, criei uma página num site de teste. As tabelas `object_state` e `current_object` saltaram de 7000 para 20000 linhas. Não consegui entender a lógica do porquê.
## Gotchas
- Ao conectar ao postgres, é necessário informar qual o "database". Cometi o erro de conectar num database padrão diferente do usado na inicialização do `docker-compose.yml` e perdi muitas horas batendo cabeça com isso.
## Arquivo para testes
Segue abaixo o arquivo `docker-compose.yml` para testes. Foi retirado de https://6.docs.plone.org/install/containers/examples/nginx-volto-plone-postgresql.html e adaptado.
```yaml
services:
frontend:
image: plone/plone-frontend:latest
environment:
RAZZLE_INTERNAL_API_PATH: http://backend:8080/Plone
ports:
- "3000:3000"
depends_on:
- backend
backend:
image: plone/plone-backend:6.1
environment:
SITE: Plone
RELSTORAGE_DSN: "dbname='postgresdbtesting' user='plone' host='db' password='plone'"
RELSTORAGE_CREATE_SCHEMA: "true"
RELSTORAGE_NAME: "plone_relstorage"
DELETE_EXISTING: 1
ports:
- "8080:8080"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_USER: plone
POSTGRES_PASSWORD: plone
POSTGRES_DB: postgresdbtesting
volumes:
- data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
data: {}
```
Loading…
Cancel
Save