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, emobject_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.
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: {}