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

Это выводит список из 156 таблиц:

discourse=# \dt

Но базовые запросы ничего не возвращают:

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

Это рабочий сайт, поэтому я уверен, что данные существуют. Что я делаю не так?

та же проблема, что и у Марка выше

  1. По возможности используйте плагин data-explorer — он включает дополнительные проверки безопасности и обозреватель схемы.
  2. В консоли psql команды необходимо завершать точкой с запятой ;.

Не могли бы вы объяснить этот процесс? Я новичок в работе с контейнерами и хотел бы начать экспериментировать со своей базой данных PostgreSQL, вместо того чтобы считать контейнер большой чёрной коробкой :slight_smile:

Вот что нужно сделать, специально для вас, @Divert:

Предполагая, что вы работаете в стандартном поддерживаемом режиме с одним контейнером (OOTB):

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

Если всё работает корректно, вы окажетесь в базе данных под пользователем discourse, подключившись к базе discourse и сможете выполнять команды PostgreSQL и SQL.

Чтобы вывести список всех таблиц в базе данных, выполните:

\dt

Если вы хотите вывести все таблицы, в названии которых есть слово “setting”, используйте:

\dt *setting* 

Если вы нашли интересующую таблицу, например users, вы можете изучить её структуру следующим образом:

\d users

Если вы хотите (например, это не самый эффективный способ) просмотреть первых 10 пользователей (отсортированных по убыванию id, только 10), выполните:

SELECT * FROM users ORDER BY id desc LIMIT 10;

В общем, вы поняли суть. Если вы хорошо знаете SQL, это проще простого.

Все здесь порекомендуют вам экспериментировать на тестовом окружении (staging), где в случае поломки вы всегда сможете пересобрать систему и начать заново. Приятного времяпрепровождения!

Не экспериментируйте на производственной системе с реальными пользователями, пока не будете очень хорошо разбираться в технологии (хотя бы освоите основы), и всегда делайте полные резервные копии заранее :slight_smile:

Удачи, @Divert!


Примечание: Подобные «эксперименты» или «самообучение» в базе данных не являются темой для раздела support на meta, так что вы действуете на свой страх и риск. Наслаждайтесь!

@neounix Большое спасибо за этот ответ! Вы пошли на все, и я очень это ценю. :smile:

Есть ли способ подключиться к базе данных Discourse (установка в Docker на собственном хосте) с помощью какого-либо SQL-клиента (например, PSequel для Mac)?

Помимо использования Docker, с которым я не знаком (и не хочу повредить базу данных), есть ли SQL-команды, которые я мог бы выполнить через плагин Data Explorer, чтобы показать имена баз данных, к которым у меня есть доступ в Discourse?