Postgresql расположение базы linux

Как переместить каталог данных PostgreSQL в новое место в Ubuntu

Базы данных имеют тенденцию перерастать свою исходную файловую систему, увеличиваясь со временем. Если вдобавок они занимают одинаковый с операционной системой раздел, это потенциально может привести к конфликту ввода-вывода.

Такие устройства, как сетевое блочное хранилище RAID, обеспечивают избыточность и улучшают масштабируемость. Вне зависимости от ваших целей, например, увеличить место или оптимизировать производительность, это руководство поможет вам в перемещении каталога данных PostgreSQL.

Подготовка

Для прохождения этого руководства вам понадобятся:

  • сервер Ubuntu 18.04 с непривилегированным пользователем и с sudoправами;
  • установленный на вашем сервере PostgreSQL.

В этом руководстве мы перемещаем данные на блочное устройство хранения, смонтированное в /mnt/volume_nyc1_01 . Способ, описанный здесь, универсален и поможет в перемещении каталога в другое место на любом базовом хранилище.

Шаг 1 — Перемещаем каталог данных PostgreSQL

Сначала нужно проверить текущее местоположение каталога, запустив интерактивный сеанс PostgreSQL. Здесь psql — это команда для входа в интерактивный монитор, а -u postgres указывает sudo выполнить psql от имени системного пользователя postgres:

В командной строке PostgreSQL, введите данную команду, чтобы показать текущий каталог:

По умолчанию стоит каталог /var/lib/postgresql/10/main , поэтому нам нужно переместить именно его. Закройте командную строку, введя \q и нажав ENTER.

Прежде чем менять что-либо в каталоге, нужно остановить PostgreSQL; так вы не нарушите целостность данных:

sudo systemctl stop postgresql

С помощью systemctl вы не сможете узнать результат выполнения всех команд. Нужно убедиться, что служба действительно остановлена. В этом поможет данная команда:

sudo systemctl status postgresql

Последняя строка вывода сообщит вам, что PostgreSQL действительно остановлен.

Для того чтобы скопировать каталог в новое местоположение, мы будем использовать команду rsync . К ним можно добавить флаги: -a сохраняет разрешения и другие свойства у каталога, а -v обеспечивает детальный вывод – так вы сможете следить за прогрессом. Чтобы сымитировать изначальную структуру каталогов в новом местоположении, мы запустим rsync из каталога postgresql . Если мы создадим этот каталог postgresql в каталоге точки монтирования и сохраним право собственности за пользователем PostgreSQL, то не столкнёмся с проблемами разрешений во время обновлений в будущем.

Примечание: если у вас включено автозавершение по табуляции, проверьте, чтобы в каталоге не было завершающей косой черты. В противном случае rsync будет просто сбрасывать содержимое каталога в точку монтирования, а не копировать сам каталог.

Строго говоря, каталог с номером версии 10 необязателен, поскольку расположение в файле postgresql.conf было задано точно. Однако желательно следовать соглашению по проекту, особенно если позже возникнет необходимость запускать несколько версий PostgreSQL:

sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

Как только завершится копирование, переименуйте настоящую папку с расширением .bak и не удаляйте её до конца перемещения. Так ничего не перепутается из-за наличия каталогов с одинаковыми именами:

sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak

Теперь мы можем настроить PostgreSQL для доступа к каталогу данных в новом месте.

Читайте также:  Grub rescue linux что делать

Шаг 2 — Указываем на новое местоположение каталога

По умолчанию значение для data_directory выставлено на /var/lib/postgresql/10/main в файле /etc/postgresql/10/main/postgresql.conf . Его нужно отредактировать, чтобы указать новый каталог:

sudo nano /etc/postgresql/10/main/postgresql.conf

Теперь в строке, начинающейся с data_directory измените путь, чтобы указать новое местоположение. Обновлённая директива будет выглядеть примерно так:

/etc/postgresql/10/main/postgresql.conf 

. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .

Сохраните файл и закройте его, последовательно нажав CTRL + X, Y и ENTER. Для настройки PostgreSQL в новом каталоге делать делать ничего больше не надо. На этом этапе осталось только снова включить службу PostgreSQL и проверить, что она действительно указывает на правильный каталог данных.

Шаг 3 — Перезапускаем PostgreSQL

После изменения директивы data_directory в файле postgresql.conf запустите сервер PostgreSQL с помощью systemctl :

sudo systemctl start postgresql
sudo systemctl status postgresql

Если служба запустилась правильно, вы увидите вот такую строку в конце вывода этой команды.

Ну и наконец, чтобы убедиться, что используется именно новый каталог, откройте командную строку PostgreSQL.

Ещё раз проверьте значение каталога данных:

Вывод отобразит, что PostgreSQL использует новое расположение каталога данных. После этого уделите время проверке: убедитесь, что вы имеете доступ к своей базе данных, а также можете без проблем взаимодействовать с данными в ней. Убедившись в целостности существующих данных, можете удалять резервный каталог:

sudo rm -Rf /var/lib/postgresql/10/main.bak

Таким образом, вы успешно переместили каталог данных PostgreSQL в новое местоположение.

Заключение

Если вы верно следовали инструкциям, каталог вашей базы данных теперь в новом месте, а вы ещё ближе к возможности масштабирования хранилища. Поздравляем!

Источник

Где PostgreSQL хранит базу данных?

sudo -u postgres psql -c «show data_directory;» покажет текущие места хранения в стандартной установке PostgreSQL.

12 ответов

Чтобы узнать, где находится каталог данных, используйте этот запрос.

Чтобы просмотреть все параметры времени выполнения, используйте

Вы можете создавать табличные пространства для хранения объектов базы данных в других частях файловой системы. Чтобы просмотреть табличные пространства, которые могут отсутствовать в этом каталоге данных, используйте этот запрос.

SELECT * FROM pg_tablespace; 

показать data_directory; Команда указывает на точное местоположение данных. Поиск определенной папки является болезненным, так как кто-то другой мог установить ее для вас, и теперь вы не знаете конфигурацию, поэтому следование sql поможет сэкономить время. 🙂 Спасибо, Майк.

Кстати, если кто-то ищет местоположение базы данных для Postgres.app на Mac, как я, это по умолчанию в ~ / Library / Application Support / Postgres [ver] / var.

В Windows7 все базы данных относятся к числу в файле с именем pg_database под C:\Program Files (x86)\PostgreSQL\8.2\data\global . Затем вы должны искать имя папки по этому номеру в C:\Program Files (x86)\PostgreSQL\8.2\data\base . Это содержимое базы данных.

Почему бы и нет? Если вы не упомянете ОС и просто скажете «это работает», любой, кто попробует это на другой ОС, будет сбит с толку. Это актуально. РЕДАКТИРОВАТЬ: О, вы, вероятно, имеете в виду «вообще не давать конкретного ответа ОС». Я думаю, это имеет смысл, я не знаю.

Читайте также:  Linux start command in background

@ Давид, вопрос был закрыт, предположительно, потому что не было указано, какая ОС. (Если бы он указывал ОС, он был бы закрыт из-за того, что он был слишком конкретным.) Ваш ответ был полезным и информативным — просто игнорируйте скептиков и спекулянтов, пока им не удастся окончательно уничтожить SO. Ненавистники будут ненавидеть, и все такое.

@ SamGoody было бы что-то вроде того, что вы говорили, если бы этот ответ был действительно правильным. (Это не совсем неверно, поскольку папка может быть в Windows, но это определенно не дано). Независимо от того, так ли это, можно легко узнать, следуя уже предоставленному ответу.

Откройте pgAdmin и перейдите в «Свойства» для конкретной базы данных. Найдите OID, а затем откройте каталог

Должны быть ваши файлы DB.

Под моей установкой Linux он находится здесь: /var/lib/postgresql/8.x/

Вы можете изменить его с помощью initdb -D «c:/mydb/»

Зависит от дистрибутива — для Fedora 20 он находится в /var/lib/pgsql/data . Лучше выяснить это с помощью ps auxw|grep postgres|grep — -D .

Как указано в «местоположении по умолчанию базы данных PostgreSQL в Linux, под Linux вы можете узнать, используя следующую команду:

ps aux | grep postgres | grep -- -D 

Расположение определенных таблиц/индексов можно настроить с помощью TABLESPACE:

CREATE TABLESPACE dbspace LOCATION '/data/dbs'; CREATE TABLE something (. ) TABLESPACE dbspace; CREATE TABLE otherthing (. ) TABLESPACE dbspace; 

Postgres хранит данные в файлах в своем каталоге данных. Выполните следующие шаги, чтобы перейти к базе данных и ее файлам:

База данных, соответствующая файлу таблицы postgresql, является каталогом. Местоположение всего каталога данных можно получить, запустив SHOW data_directory . в операционной системе UNIX (например: Mac) /Library/PostgreSQL/9.4/data Перейдите в базовую папку в каталоге данных, где есть все папки базы данных: /Library/PostgreSQL/9.4/data/base

Найдите имя папки базы данных, запустив (дает целое число. Это имя папки базы данных):

SELECT oid from pg_database WHERE datname = ; 

Найдите имя файла таблицы, запустив (дает целое число. Это имя файла):

SELECT relname, relfilenode FROM pg_class WHERE relname = ; 

Это двоичный файл. Данные файла, такие как размер и время создания, могут быть получены как обычно. Для получения дополнительной информации прочитайте этот поток SO

В Mac: /Library/PostgreSQL/9.0/data/base

Невозможно ввести каталог, но вы можете посмотреть содержимое через: sudo du -hc data

Если вы установили через homebrew (а почему бы и нет?), Он будет в /usr/local/var/postgres который вы можете найти, используя @ MikeSherrill’s show data_directory; совет

/Library/PostgreSQL/9.0/data/base кажется более похожим на Mac, чем /usr/local/var/postgres . Вы не можете перейти к последнему в Finder, не включив скрытые функции Finder.

К вашему сведению, этот Ответ по-прежнему корректен на Postgres 9.4 с использованием установщика, предоставленного EnterpriseDB .

В моем случае это находится в: / Users / Bob / Библиотека / Поддержка приложений / Postgres / VAR-9,5

Все уже ответили, но только для последних обновлений. Если вы хотите знать, где находятся все файлы конфигурации, запустите эту команду в оболочке

SELECT name, setting FROM pg_settings WHERE category = 'File Locations'; 

Держу пари, что вы задаете этот вопрос, потому что вы пробовали pg_ctl start и получили следующую ошибку:

pg_ctl: не указан каталог базы данных и переменная среды PGDATA unset

Другими словами, вы ищете каталог, который будет помещен после -D в команду pg_ctl start .

Читайте также:  Intel hda audio linux

В этом случае каталог, который вы ищете, содержит эти файлы.

PG_VERSION pg_dynshmem pg_multixact pg_snapshots pg_tblspc postgresql.conf base pg_hba.conf pg_notify pg_stat pg_twophase postmaster.opts global pg_ident.conf pg_replslot pg_stat_tmp pg_xlog postmaster.pid pg_clog pg_logical pg_serial pg_subtrans postgresql.auto.conf server.log 

Вы можете найти его, указав любой из файлов и каталогов выше, используя поиск, предоставляемый вашей ОС.

Например, в моем случае (HomeBrew установить на Mac OS X) эти файлы находятся в /usr/local/var/postgres . Для запуска сервера я печатаю:

pg_ctl -D /usr/local/var/postgres -w start 

Источник

Where Postgres database files are saved in ubuntu?

Execute this query just like you execute all queries. You could use pgAdmin, psql or whatever client you use. But, why do you need these files? And did you read the Ubuntu manual?

@FrankHeikens: I got a question: if a user can access the postgres database files, can they extract the database structure or other information from those files? Thanks.

SHOW data_directory; after running above command, it is giving me the result below. What does it mean? data_directory —————————— /var/lib/postgresql/9.1/main (1 row)

Here’s how I located the directory of my Postgres database files in Ubuntu:

Run the command below in your terminal to switch user to postgres user:

It will request for the postgres user password which you set up when you were setting up PostgreSQL on your machine.

Next, you will need to login into the psql terminal/prompt. This can be accomplished by running the code below:

It will also request for the postgres password which you set up when you were setting up PostgreSQL on your machine.

If you are successfully logged in, you will see a prompt similar to this:

psql (11.5 (Ubuntu 11.5-3.pgdg18.04+1), server 10.10 (Ubuntu 10.10-1.pgdg18.04+1)) Type "help" for help. postgres=# 

At this point you will execute the query below to display the directory where Postgres Database files are stored on your Linux macchine:

This should display an output similar to this:

data_directory ----------------------------- /var/lib/postgresql/10/main (1 row) 

You can now locate the Postgres Database files by navigating the directory that was displayed.

However, the PostgreSQL configuration directory in Ubuntu is located in /etc/postgresql/10/main . Take note that 10 is the version of my PostgreSQL installation on my server. Your version might be 9.5 , 11 or 12 or any other version. Run the command psql —version to confirm your PostgreSQL version.

Run the command below to navigate to the directory:

cd ~ cd /etc/postgresql/10/main 

I hope this helps

Источник

Оцените статью
Adblock
detector