How to access the discourse database?

Hi all,

This is probably a stupid question but how can I access the database?
Is there something equivalent to phpadmin (or another GUI) that I can use to view and edit the database of discourse? If not, then what is the best way to access/view/edit it?

Install the Data Explorer Plugin and have at it.

If you want to do postgres command line stuff, you’ll need to enter the container to do that using the Docker enter command.

Hi, Docker enter, but what’s next?

I tried psql but got psql: FATAL: role "root" does not exist

postgres runs under the postgres user, per:

You want to sudo postgres psql discourse to hit the right user and database…

I see , thank you! @sam

In case anyone else is confused the actual command you need to run inside the container is:

sudo -u postgres psql discourse

i.e. ‘Run psql discourse as the postgres user.’

sudo -u postgres psql discourse

Isso lista as 156 tabelas:

discourse=# \dt

Mas consultas básicas não retornam nada:

discourse=# select * from users limit 1
discourse-#

Este é um site funcional, então tenho certeza de que há dados. O que estou fazendo de errado?

mesmo problema que o Mark acima

  1. Use o plugin data-explorer sempre que possível — ele vem com algumas verificações de segurança extras e um explorador de esquema.
  2. Você precisa finalizar os comandos no console psql com um ; ponto e vírgula.

Você pode explicar esse processo, por favor? Sou iniciante em containers e adoraria começar a interagir com meu banco de dados Postgres em vez de deixar o container ser uma grande caixa preta para mim :slight_smile:

Aqui está, só para você @Divert:

Supondo que você esteja no modo de container único padrão (OOTB) na configuração padrão suportada:

cd /var/discourse
./launcher enter app
su discourse
psql discourse

Agora, se tudo estiver funcionando corretamente, você estará no banco de dados como o usuário discourse, conectado ao banco de dados discourse, pronto para emitir comandos PostgreSQL e SQL.

Então, se você quiser listar todas as tabelas no banco de dados, pode:

\dt

Se quiser listar todas as tabelas com a palavra “setting”, então pode:

\dt *setting*

Se encontrar uma tabela de interesse, digamos a tabela de usuários, você pode examinar a estrutura da tabela, assim:

\d users

Se desejar (por exemplo, e não é um exemplo eficiente) examinar os primeiros 10 usuários (ordenados por ID decrescente, apenas 10); você pode simplesmente:

SELECT * FROM users ORDER BY id desc LIMIT 10;

De qualquer forma, você entendeu a ideia. Se você for bom em SQL, é um prato cheio.

Todos aqui recomendarão que você brinque em uma configuração de staging (onde, se quebrar coisas, pode apenas reconstruir e começar de novo) e se divirta!

Não brinque em um sistema de produção com usuários reais até que você esteja muito confortável com a tecnologia (talvez tenha dominado pelo menos os fundamentos) e sempre faça backups completos primeiro :slight_smile:

Divirta-se @Divert


Nota: Esse tipo de “brincadeira” ou “aprendizado autodidata” no banco de dados não é o tópico de suporte no meta, então, basicamente, você está por sua conta. Aproveite!

@neounix Muito obrigado por essa resposta! Você foi além e eu realmente aprecio isso. :smile:

Existe alguma maneira de conectar ao banco de dados do Discourse (instalação self-hosted no Docker) usando algum cliente SQL (como o PSequel para Mac)?

Além de usar o Docker, com o qual não estou familiarizado (e não quero corromper o banco de dados), existem comandos SQL que eu poderia executar através do plugin Data Explorer para mostrar os nomes dos bancos de dados aos quais posso acessar no Discourse?