Discourse Data Explorer

:discourse2: Summary Discourse Data Explorer allows you to make SQL queries against your live database, allowing for up-to-the-minute stats reporting.
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

:information_source: If you’re looking for examples or support for any custom queries, you can find lots of topics in our Data & reporting category under the sql-query tag. If there’s not one to suit your particular needs, please feel free to create a new topic to ask the community for some help. :memo: Query Help

:discourse2: Hosted by us? This plugin is available on our Business and Enterprise plans. Data Explorer | Discourse - Civilized Discussion

After installing the plugin, head to /admin/plugins .

de1

Click on the “Settings” button, and turn on data explorer enabled, then return and reload the page.
There should now be a tab in the stacked nav called “ Data Explorer ”. Select it or head to /admin/plugins/explorer , then use the + , Import or Run buttons to get started.

Default queries

On a fresh install, the data explorer now ships with several queries that can help you draw insights from your forum’s activity. Open any query and click Run to try it out.

Here's what the stock queries look like.

Note: Default queries are picked up from this file: discourse-data-explorer/lib/discourse_data_explorer/queries.rb at main · discourse/discourse-data-explorer · GitHub

If you have an awesome query that you want everyone to have, make a PR just like this one.

Default queries cannot be edited, feel free to copy the sql and paste it into a new query if you’d like to modify them.

Writing queries

When you click any of the Edit buttons on a query view, or start a new Explorer Query, you are presented with a screen like the one below:

The top two boxes are the name and description of the query. The name is what you’re selecting in the dropdown box, and the description should be used for things like explaining what to put in the query parameters or to describe what data is being queried.

The left pane is where you write the SQL query. Minor syntax highlighting and checking is provided.

Automatically running queries

While you can always run a query by clicking the Run button, you can save time when loading a query by adding the run parameter to the URL.

For example: /admin/plugins/explorer/queries/123?run

When this parameter is added to the URL, the query will run as soon as you load the page, so you don’t need to click the Run button to see the results. This is especially helpful for queries you run frequently, allowing you to bookmark them or add them to your sidebar with the run parameter included for a one-click report.

Importing queries

For an example, let’s import one that I wrote. Download this file, then open the import dialog and select the file to be uploaded or paste the query in the text box. Click Import to save it and then click Run to see the results.

most-common-likers.dcquery (1).json (442 Bytes)

Looks like all of the Discourse developers like each other quite a bit :heart:

Searching for queries

If you’ve accumulated too many awesome queries, no problem! The search bar can help you filter through titles and descriptions.

Allow non-staff groups to run queries

You can add specific groups (including moderators) to a query to grant them access to it:

After saving, you can find it from the Groups page for that particular group on the Reports tab:

Click any query to open it and then the Run button to see the results. You can also bookmark group reports by clicking the Bookmark button.

Sharing queries with predefined parameters

If you have included user-defined parameters in your query, you can share a link to the query and include the parameters in the URL so they will be pre-filled when the page loads.

You must include parameters in the URL in this format params={"parameter_name":"value"}. Separate multiple parameters with commas. For example:

discourse.example.com/g/my-group/reports/6?params={"param1":"value1","param2":"value2"}

Couple with the run parameter mentioned above, you can share a report with predefined parameters that runs automatically when loaded.

Result limits and exporting queries

With large queries, you may notice that there is a limit on the number of rows that the Data Explorer will display. By default, the limit is set to 1000 rows. This is to prevent excessively large queries from slowing down or disrupting the performance of your Discourse instance.

If you want to bypass this limit, you have a few of options:

  1. Pagination: You can paginate your results. Instead of trying to return all results at once, you can write your query to return a specific range of results. You can then adjust this range to view different sections of your data. This won’t increase the limit, but it will allow you to view all your data in sections.
  2. Increase the limit: If you have access to the Discourse server and are comfortable making changes to Discourse settings, you can increase the limit. However, this should be done with caution. Increasing the limit can put a lot of load on your server if you’re not careful, especially if multiple users are running large queries at the same time.
  3. Download the Results: You also have the option to download the query results instead of viewing them directly in Discourse by clicking either the JSON or CSV button after running the query. Data downloaded from a query in JSON or CSV format will have a much higher results limit of 10,000 rows. For programmatic purposes, you want want to opt for the Json format, or if you’d like to work on the data in a spreadsheet application, the CSV format might be more convenient.

It’s generally a good idea to try and write more efficient queries, or to filter your data so that you’re only retrieving what you need, rather than trying to bypass the limit.

You can also export the SQL query itself in .JSON format by clicking the Export button. Queries that are exported using this method can then be imported into other Discourse sites, or used with third party applications.

Query plan

The “Include query plan” checkbox can be used for better understanding and optimizing your SQL queries.

When you check this box and run a query, Discourse will display the sequence of operations used to access data in the Discourse database. This can include operations like scans, joins, sorts, and other database actions. By examining the query plan, you can see exactly how the database is executing your query.

The Data Explorer tutorial series

We also have a dedicated sql-tutorial series about the Data Explorer! If you’re interested in learning more about writing SQL queries in Discourse, we highly recommend reading through the topics in this series:

Last edited by @hugh 2025-09-03T00:45:12Z

Last checked by @hugh 2025-09-03T00:45:21Z

Check documentPerform check on document:
119 curtidas

Olá! :slight_smile:

Então, perguntei neste tópico como copiar os links de todos os tópicos em uma consulta de pesquisa. Fui direcionado para cá. Então, perguntei ao gerente do nosso fórum se tínhamos este plugin instalado, o que temos. No entanto, não sabemos como usá-lo para copiar todos os links de uma consulta de pesquisa para um arquivo CSV usando este plugin. Alguém já realizou esta ação antes e talvez possa nos indicar a direção certa? :sweat_smile:

Note que sou um usuário regular do fórum, não tenho poderes de staff. No entanto, estou repassando esta informação ao gerente do site, que tem e pode fazer isso por mim. :slight_smile:

Obrigado desde já!

Olá Preston!

O plugin Data Explorer permite criar consultas SQL.

Você quer criar uma nova que liste os tópicos que você procura.

Em seguida, quando você executar a consulta, verá um botão CSV para exportar o resultado para um arquivo CSV.

Espero que ajude!

Avise-nos se precisar de ajuda adicional para criar a consulta!

3 curtidas

Obrigado! Vou repassar :hugs:

3 posts foram divididos em um novo tópico: Como contornar o limite de 10.000 resultados do explorador de dados?

Olá, tenho uma solicitação de recurso para este ótimo plugin.

Alguns dos relatórios que crio usando o Data Explorer seriam muito úteis para minha equipe se eu pudesse listá-los na página de Relatórios do Painel (/admin/reports).

Seria possível adicionar uma opção a cada consulta do Data Explorer para ser listada na página de Relatórios? Obrigado.

Por exemplo:

  • Listar esta consulta personalizada na página Relatórios
3 curtidas

Obrigado por este recurso!

Estou explorando como poderíamos escrever métricas personalizadas. Estamos usando o Discourse junto com o Workadventu.re (uma ferramenta de colaboração 2D baseada em avatares A/V).
Estou executando um script personalizado lá para registrar atividades em uma planilha do Google via webhook. Para ter tudo centralizado em nossa ferramenta principal (Discourse), seria ótimo ter esses dados impressos no Discourse…
Alguma dica?!

1 curtida

Eu realmente esperava que houvesse um construtor de consultas que ajudasse a escrever SQL. Meu SQL está velho e enferrujado, e escrevê-lo à mão é propenso a erros e demorado. Seria bom se houvesse uma maneira mais fácil!

2 curtidas

Olá @davidgs, bem-vindo à Meta :wave: :slight_smile:

Você já tentou usar um LLM como o ChatGPT? Ele tem um entendimento razoável do Discourse e tem sido bastante confiável quando eu também precisei fazer consultas ao explorador de dados.

Eu costumo escrever meus prompts como “Escreva uma consulta do explorador de dados do Discourse que retorne x,y,z de a,b,c onde…” e acabo com algo bem razoável.

No canto superior direito desta página, você também pode ver um pequeno ícone de robô como o abaixo.
image

Se for esse o caso, você também pode tentar o AI Helper Bot que está integrado à Meta.

2 curtidas

A maioria de nós não o vê. Mas sempre existe o ask.discourse.com

2 curtidas

Sim, eu não conseguia me lembrar se isso ainda era apenas uma coisa de nível de confiança 3 ou não. Boa sugestão sobre o site ask.discourse.com.

Como exemplo de referência, joguei escreva uma consulta do explorador de dados do discourse que retorne uma lista de todos os usuários que disseram a palavra “software” na barra de entrada de texto do ask.discourse.com e recebi a seguinte consulta de volta:

SELECT 
    p.user_id, 
    u.username,
    COUNT(p.id) AS post_count
FROM 
    posts p
JOIN 
    users u ON u.id = p.user_id
WHERE 
    p.raw ILIKE '%software%'
GROUP BY 
    p.user_id, u.username
ORDER BY 
    post_count DESC;

Muito razoável. Também posso garantir que ele faz consultas significativamente mais complexas do que esta.

2 curtidas

de alguma forma a exportação de dados do data explorer não está mais funcionando com as últimas atualizações do discourse e do data explorer que instalei há cerca de duas horas. Os dados em si são criados corretamente, mas não podem mais ser exportados.

Clicar nos botões JSON ou CSV apenas cria um breve flash e nada mais acontece. Funcionou bem há cerca de duas semanas.

No console do navegador, vejo o seguinte erro:
CSV:

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultCsv query-result.js:287
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106

JSON:

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultJson query-result.js:283
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106
1 curtida

Obrigado pelo relatório de bug, @GuidoD!

Eu mesclei uma correção para este problema hoje mais cedo, por favor, tente atualizar e confirme se funciona para você. :slight_smile:

2 curtidas

obrigado pela correção rápida.
Posso confirmar que está funcionando bem novamente.

1 curtida

para uma pequena quantidade de dados, a exportação para JSON e CSV estão funcionando bem. Mas para uma quantidade maior de dados, a exportação CSV está funcionando bem, mas a exportação JSON resulta em nginx 502 bad gateway (provavelmente devido a um timeout após 30 segundos, onde a criação do arquivo JSON leva mais de 30 segundos).
Existe uma maneira fácil de aumentar o valor do timeout do nginx?

Se eu reduzir o período da consulta, o arquivo CSV tem 12,9 MB e o arquivo JSON tem 645 MB. O arquivo CSV total é 13,5 MB, então apenas um pouco maior, mas o arquivo JSON não é criado devido ao erro do nginx.

Ou talvez a criação do arquivo JSON esteja falhando devido a alguns dados estranhos. A criação do arquivo JSON gera um arquivo de log?

As consultas JSON são executadas com um LIMIT externo maior por padrão em comparação com as consultas CSV. Adicione paginação personalizada dentro da consulta para garantir que ela seja concluída a tempo.

1 curtida

É possível executar instruções UPDATE do Data Explorer?

Estou tentando fazer uma atualização em massa de uma determinada tabela, mas recebo este erro:

PG::FeatureNotSupported: ERROR:  WITH query \"query\" does not have a RETURNING clause
LINE 29:   ) SELECT * FROM query

Não, o Data Explorer executa apenas transações somente leitura. (Se você atualizou sua consulta para ter uma cláusula RETURNING, receberia um erro de transação somente leitura.)

Se você estiver auto-hospedando, use um dos guias “launcher enter”, como

Se você já tem seu UPDATE projetado, então você pode usar psql discourse em vez de rails c.

Se você estiver em um serviço hospedado, entre em contato com o suporte para que eles executem a alteração.

1 curtida

Obrigado pela resposta. Faz sentido. Estamos usando um serviço hospedado, então entrarei em contato com o suporte deles.

Se eu compartilhar uma consulta SQL com o grupo de moderadores, como os usuários do grupo de moderadores podem executar a consulta em suas contas? Eles não conseguem ver o plugin Explorador de Dados.