2 Uso de Postgres como backend de dados do Plone
Rodrigo Carvalho Benevides edited this page 4 weeks ago

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.

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.

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: {}