Postgresql как изменить расположение базы данных

PostgreSQL for Windows installs the PGDATA directory by default into "C:Program FilesPostgreSQLsome versiondata". This mini-HOWTO explains how to change the default PGDATA directory to another location.

PostgreSQL for Windows installs the PGDATA directory by default into «C:Program FilesPostgreSQLsome versiondata». This mini-HOWTO explains how to change the default PGDATA directory to another location.

Contents

  • 1 Step 1: Stop The PostgreSQL Service
  • 2 Step 2: Change Registry Values
  • 3 Step 3: Move the data folder to a new the location
  • 4 Step 4: Restart The PostgreSQL Service

Step 1: Stop The PostgreSQL Service

Close all application that are currently connected to your database, then go to Windows Services Management and stop the PostgreSQL service:

stop service

Start->Settings->Control Panel->Administrative Tools->Services

You should check the task manager to see if any postgresql.exe instances are still running. If so, DO NOT TERMINATE them, instead close all applications that are still connected to the database. Sometimes services like webservers keep persistent connections. In this case you also should stop these services.

Step 2: Change Registry Values

Start the Windows Registry Editor (regedit.exe) and navigate to: «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicespgsql-some version».

Double click on «ImagePath» and change the directory after the «–D» option to your new location. If the path to your new location contains spaces, you should then enclose it with quotes.

change the PGDATA path

Registry Editor

Step 3: Move the data folder to a new the location

Move your current PGDATA directory to the directory you just specified in Step 2. Please note that you should do this as Administrator on server machines.
You should also check user permissions in the new directory to ensure the username under which your PostgreSQL instance runs has permissions to do so in the new directory, otherwise PostgreSQL will not start.

Step 4: Restart The PostgreSQL Service

Before you can start your database you must close and re-open the Windows Services Management window. This refreshes the path you just changed in the registry without the need to restart your system.

After closing and re-opening the Services Management window, you should check the «path to executable» information of the PostgreSQL Database service. The path after «–D» option should be pointing to your new directory now.

check the new path

Service properties

Now that the PGDATA directory has been re-located and the service startup parameter in the registry has been modified, you can go ahead and start the service. [[Category::Administration]]

  • Главная

  • Инструкции

  • PostgreSQL

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

Blog

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

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

Как Переместить Каталог Данных Postgre SQL В Новое Место В Ubuntu

Подготовка

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

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

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

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

sudo -u postgres psql

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

SHOW data_directory;

По умолчанию стоит каталог /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 для доступа к каталогу данных в новом месте.

Шаг 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.

sudo -u postgres psql

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

SHOW data_directory;

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

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

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

Заключение

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

1 августа, 2022 12:21 пп
298 views
| Комментариев нет

Cloud Server, Ubuntu

Объём БД постоянно увеличивается, и со временем она переполняет пространство файловой системы. Кроме того, если база данных находится на одном разделе с остальной операционной системой, это может привести к конфликтам доступа к устройствам ввода/вывода.

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

Требования

  • Виртуальный сервер и пользователь с доступом к sudo, (мы используем Ubuntu 22.04, настроенный по этому мануалу).
  • Сервер PostgreSQL (чтобы установить PostgreSQL, следуйте этому руководству).

Этот мануал покажет, как переместить данные в блочное хранилище, смонтированное в mnt/volume-nyc1-01. Это поможет вам переместить каталог данных в новое расположение независимо от того, какое хранилище вы используете.

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

Давайте подготовимся к перемещению каталога данных PostgreSQL. Для этого нужно уточнить его текущее расположение. Откройте интерактивную сессию PostgreSQL; флаг -u postgres откроет сессию пользователя postgres.

sudo -u postgres psql

Когда строка откроется, запросите текущий каталог данных:

SHOW data_directory;

Вы увидите такой вывод:

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

Данный вывод подтверждает, что PostgreSQL использует стандартный каталог данных по умолчанию, /var/lib/postgresql/14/main. Это и есть каталог, который нужно переместить. Чтобы закрыть сессию, введите q.

q

Отключите PostgreSQL, прежде чем вносить изменения в каталог данных, чтобы обеспечить их целостность:

sudo systemctl stop postgresql

Утилита systemctl не отображает вывод некоторых команд управления сервисами. Чтобы убедиться в том, что сервер БД отключен, запросите его состояние:

sudo systemctl status postgresql

В выводе вы увидите, что в данный момент ваша копия PostgreSQL находится в состоянии inactive (dead):

postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago
    Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4588 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Итак, сервер остановлен, теперь скопируйте текущий каталог данных в новое расположение с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога, а –v отображает подробный вывод.

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

Примечание: Убедитесь, что в конце названия каталога нет слеша (система может добавить его автоматически, если у вас включена эта функция). Если такой слеш есть, rsync будет сбрасывать содержимое каталога в точку монтирования, а не в сам каталог.

Каталог, указывающий версию (14), не является строго необходимым. В то же время вам не помешает его иметь, если вы хотите следовать соглашениям проекта и особенно если у вас есть необходимость в будущем использовать несколько версий 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

2: Настройка нового каталога данных

Согласно файлу /etc/postgresql/14/main/postgresql.conf, по умолчанию data_directory находится в /var/lib/postgresql/14/main. Откройте этот файл:

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

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

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

Сохраните и закройте файл (CTRL + X, Y, Enter). Мы сделали все, что нужно для настройки PostgreSQL и поддержки нового каталога данных. Теперь пора запустить сервис PostgreSQL и убедиться, что он использует новый каталог.

3: Перезапуск PostgreSQL

Изменив директиву data-directory в каталоге postgresql.conf, вы должны запустить сервер PostgreSQL.

sudo systemctl start postgresql

Давайте убедимся в том, что теперь PostgreSQL использует новый каталог данных. Запросите для этого состояние сервиса:

sudo systemctl status postgresql

Если сервис работает правильно, в выводе будет сказано active (exited):

postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago
    Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4852 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Мы можем убедиться, что PostgreSQL использует новый каталог данных. Откройте для этого командную строку PostgreSQL:

sudo -u postgres psql

Снова запросите каталог данных:

SHOW data_directory;

Вы получите следующий результат:

             data_directory
----------------------------------------
 /mnt/volume_nyc1_01/postgresql/14/main
(1 row)

Как видите, PostgreSQL использует новое расположение данных. Также вам необходимо убедиться в том, что БД полностью работает, а вы можете взаимодействовать с данными. После проверки целостности данных вы можете удалить резервную копию каталога данных:

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

Заключение

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

Читайте также: 5 вариантов настройки сервера для обслуживания веб-приложения

Tags: PostgreSQL, Ubuntu 22.04

Filip Todic

There comes a time when you have to restore a relatively large database locally. Most likely, you’ve partitioned your disk, and your root partition got the thick end of it, 50 GB if you were generous. Let’s assume that that’s not nearly enough for the database you’re about to restore. At the same time, your /home partition got the rest of the disk space you had available.

You can always resize these two partitions, but then you would have to back up your /home directory, unmount it or find a Live USB and tamper with them. If you don’t have the time, or the desire, or even a backup disc, you can always change the location where postgresql stores its data.

The following instructions are a love letter to all those lost souls who find themselves in this situation and forget to check the status of SELinux, as well as to my future self who’ll most likely have to do it again. Considering this is mostly a dump of my bash history, I hope this exact procedure works for you. If not, feel free to contact me and we’ll update it together.

Procedure

A fresh install is the easiest to change, but let’s assume you have some databases locally you don’t want to lose, just move them and restore the large database next to them. The steps are more or less the same anyway.

data_directory and config_file

Before you start anything, locate the postgresql‘s configuration file and its data directory:

$ sudo su - postgres
[postgres@host ~]$ psql
Password for user postgres:
psql (12.6)
Type "help" for help.

postgres=# SHOW config_file;
            config_file
-----------------------------------
 /var/lib/pgsql/data/postgresql.conf
(1 row)

postgres=# SHOW data_directory;
  data_directory
-------------------
 /var/lib/pgsql/data
(1 row)

Enter fullscreen mode

Exit fullscreen mode

Stop the systemd service

Stop the postgresql systemd service:

systemctl stop postgresql.service

Enter fullscreen mode

Exit fullscreen mode

New location

Create a directory where you have enough disk space available (in this case, it’s the /home directory), grant the postgres user ownership and permissions over it and copy the original data directory to the new location (the key is to preserve the same ownership and permissions structure):

mkdir /home/pgdata
chown postgres:postgres /home/pgdata
chmod 700 /home/pgdata
rsync -av /var/lib/pgsql/data/ /home/pgdata/data

Enter fullscreen mode

Exit fullscreen mode

postgresql configuration

Open the postgresql.conf file in the new location and update the data_directory variable, setting it to the new location where your data was moved:

vim /home/pgdata/data/postgresql.conf

Enter fullscreen mode

Exit fullscreen mode

#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------

# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.

data_directory = '/home/pgdata/data'    # use data in another directory
                                        # (change requires restart)
#hba_file = 'ConfigDir/pg_hba.conf'     # host-based authentication file
                                        # (change requires restart)
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file

Enter fullscreen mode

Exit fullscreen mode

systemd configuration

Do the same thing with the postgresql.service‘s systemd configuration file:

vim /lib/systemd/system/postgresql.service

Enter fullscreen mode

Exit fullscreen mode

# ...
Environment=PGDATA=/home/pgdata/data
# ...

Enter fullscreen mode

Exit fullscreen mode

Once you’re done editing the systemd configuration, reload it and start the service:

systemctl daemon-reload
systemctl start postgresql.service
systemctl status postgresql.service

Enter fullscreen mode

Exit fullscreen mode

SELinux

If you’re receiving some vague Permission denied errors, check whether or not you have SELinux enabled:

cat /sys/fs/selinux/enforce
1

Enter fullscreen mode

Exit fullscreen mode

If the result is 1, then SELinux is in enforcing mode. To temporarily set it to permissive mode (0), run:

setenforce 0

Enter fullscreen mode

Exit fullscreen mode

You can try starting the postgresql.service again. If the process has started successfully, stop it, and tell SELinux to apply the same context to the new location. Then you can return SELinux to enforcing mode

semanage fcontext --add --equal /var/lib/pgsql /home/pgdata
restorecon -rv /home/pgdata
setenforce 1

Enter fullscreen mode

Exit fullscreen mode

Then you should be able to start the postgresql.service without any errors

systemctl start postgresql.service
systemctl status postgresql.service

Enter fullscreen mode

Exit fullscreen mode

Confirmation

To confirm the new location and configuration is used, rerun the first step:

sudo su - postgres
[postgres@lenovo ~]$ psql
Password for user postgres:
psql (12.6)
Type "help" for help.

postgres=# SHOW data_directory;
  data_directory
-------------------
 /home/pgdata/data
(1 row)

postgres=# SHOW config_file;
            config_file
-----------------------------------
 /home/pgdata/data/postgresql.conf
(1 row)

Enter fullscreen mode

Exit fullscreen mode

Жил был сервис, и была у него база, и жила она в /var/lib/postgresql на основном диске. И стала база занимать почти весь диск.

Ну и мы не лыком шиты, перенесем ее на отдельный диск.

План такой:

  • Добавляем новый диск
  • Монтируем его в какую-то папку
  • Переносим туда БД
  • Тут, возможно, мы захотим жить в новой директории — тогда поменяем конфиг.
  • Прячем текущую папку /var/lib/postgresql
  • Монтируем наш диск вместо старой папки

Погнали 🚀

Готовим диск

Представим, что мы уже добавили диск в гипервизоре и видим его в выводе lsblk:

admin@host.infra.domain.local:~$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 99.2M  1 loop /snap/core/10908
loop1    7:1    0 99.2M  1 loop /snap/core/10859
sda      8:0    0  550G  0 disk 
├─sda1   8:1    0    1M  0 part 
└─sda2   8:2    0  550G  0 part /
sdb      8:16   0 1000G  0 disk <<<<------- THIS

Теперь разметим его с помощью parted:

parted /dev/sdb
mklabel gpt
unit s
mkpart primary ext4 0% 100%
quit

Отформатируем раздел в ext4:

mkfs.ext /dev/sdb1

Монтируем диск

Сначала создадим левую папку, куда мы примонтируем новый раздел и будем перекидывать базу mkdir /tempdb.

☝️ Хорошим тоном считается добавлять в /etc/fstab записи с UUID диска, а не /dev/sdb1.

Дальше посмотрим UUID нашего раздела. Даем команду blkid:

/dev/sda2: UUID="b651b0ae-ef1d-11e9-be07-005056926860" TYPE="ext4" PARTUUID="1cd39f87-c0cd-f24d-baff-a39ff152be09"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9" TYPE="ext4" PARTLABEL="primary" PARTUUID="4d0987b3-0010-434c-aac4-b42ba2a75582"

Вот же он: /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9"

Теперь добавляем строку в файл /etc/fstab, можно руками через vi/nano, можно echo-м:

echo 'UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /tempdb ext4 defaults 0 0' >> /etc/fstab

После этого делаем mount -a. Раздел примонтирован в новую папку.

Перенос базы

Сначала остановим сервис systemctl stop postgresql, чтобы во время копирования не записывались свежие данные.

Начинаем копировать данные:

rsync -arv /var/lib/postgres/ /tempdb

и ждем. У меня база на 500Гб копировалась два часа, но всё зависит от железа, самой базы, фазы луны и дня недели.

На этом этапе мы можем изменить путь к базе в конфигурационном файле postgresql и запустить сервис, всё будет работать. Для этого редактируем файл /etc/postgres/10/main/postgresql.conf и меняем пусть к директории в строке:

data_directory = '/tempdb/10/main'

Но если мы не хотим менять папку в конфиге Постгреса, то нужно спрятать старую базу, ведь мы не хотим ее сразу удалять, вдруг понадобится.

mkdir /var/oldpostgres && mv /var/lib/postgres/ /var/oldpostgres

Теперь проверим, что мы не напутали с папками и /var/lib/postgresql на месте. Если нет — mkdir /var/lib/postgresql.

Размонтируем диск umount /tembdb, а затем заходим в nano /etc/fstab и редактируем строку с подключением. Нам нужно изменить точку монтирования. Должно получиться так:

UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /var/lib/postgresql ext4 defaults 0 0

☝️ Не забудь, что UUID у тебя будет свой уникальный

Делаем mount -a и пробуем запустить сервис systemctl start postgresql.

Проверяем

Как проверить? Ну например netstat -tulpn | grep 5432, и если у вас постгрес на стандартном порту, должен быть вывод, вроде:

tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      225199/postgres     
tcp6       0      0 :::5432                 :::*                    LISTEN      225199/postgres

Можно попробовать зайди в базу sudo -u postgres psql:

psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# 

Если всё ок, можно удалить старую базу, чтобы освободить место в корне.


💡 Если вам нравятся мои посты, то подписывайтесь также:

  • Новостной канал 📺
  • Чат 🤘🏼

Если у вас установлен Postgres в конфигурации по умолчанию, то его базы хранятся в Program Files. Если есть необходимость освободить место на системном диске C, то можно перенести базы данных Postgres на другой диск. Общий алгоритм такой (включая linux системы):

  • Останавливаем сервис СУБД
  • Перемещаем базы
  • Меняем конфиг postgres
  • Запускаем сервис СУБД

Для Windows системы:

  1. Заходим в сервисы
    Нажимаем WIN+R, и вводим команду
    services.msc

    Отключаем службу, относяющуюся к СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6. В свойствах службы можно посмотреть команду запуска. Свойства службы postgres В сущности необходимо будет поменять параметр после ключа -D

  2. Заходим в реестр
    Нажимаем WIN+R, и вводим команду
    regedit

    Ищем ветку служб Windows и наш сервис СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
  3. Меняем ключ реестра ImagePath. Реестр Windows, служба postgres

Допустим надо указать папку D:databasesPostgreSQL9.6. Тогда, вместо

"C:Program FilesPostgreSQL9.6binpg_ctl.exe" runservice -N "postgresql-x64-9.6" -D "C:Program FilesPostgreSQL9.6data" -w

прописываем:

"C:Program FilesPostgreSQL9.6binpg_ctl.exe" runservice -N "postgresql-x64-9.6" -D "D:databasesPostgreSQL9.6" -w
  1. Копируем/перемещаем базы из старого места в новое
  2. Запускаем службу

Для linux системы:

  1. Отключаем службу, относяющуюся к СУБД
    /etc/init.d/postgresql stop
  2. В конфигурационном файле /etc/init.d/postgresql меняем содержимое переменной $PGDATA
  3. Копируем/перемещаем базы из старого места в новое
  4. Запускаем службу, относяющуюся к СУБД
    /etc/init.d/postgresql start

Ссылка по теме:

  • How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04

EMC License Server linux installation error

Linux error “no such file or directory”. Accordint to official guide troubleshooting this error occurs due to a missing LSB 3 library, typically ld-lsb-x86-64.so.3.

Команда su в Ubuntu

Чтобы не набирать постоянно sudo для повышения привилегии выполнения команды в Ubuntu можно использовать специальную команду для перевода пользователя в сессию под root-ом.

Загрузить shape файл (*.shp) в Postgres

Естественно должно быть установлено расширение PostGIS для PostgreSQL. Запускаем утилиту, входящую в состав PostGIS «PostGIS 2.0 Shapefile and DBF Loader Exporter!».

Обновление баз NOD32 на компьютере без интернета

Инструкция по offline обновление баз антивируса NOD32, если есть лицензия или готовый архив с базами

ng serve не срабатывает слежение за файлами

sudo sysctl fs.inotify.max_user_watches=256000

Обновление времени в linux

Автоматическая синхронизация времени времени в linux на примере CentOS и пакета ntpdate

Как мне перенести базу данных PostgreSQL на новый жесткий диск?


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

Первым делом, остановите службу PostgreSQL на время переноса.

Windows XP
Пуск > Панель Управления> Администрирование > Службы

Windows Vista/W7
Пуск > Поиск > Службы

Вам нужно, чтобы открылось такое окно:

postgres-001.jpg

Щелкните правой кнопкой мыши по службе PostgreSQL и выберите в меню «Стоп» для остановки службы.

Затем создайте на том диске куда вы хотите перенести базу папку Program Files в ней PostgreSQL и в ней data. Должен получиться путь I:/Program Files/PostgreSQL/data

Далее скопируйте или переместите все данные из первоначальной папки c:/program files/PostgreSQL/8.3/data в новую созданную Вами I:/Program Files/PostgreSQL/data. Это может занять много времени.


Редактирование реестра:
Теперь мы должны указать PostgreSQL новую папку расположения данных, а для этого нам нужно внести изменения в реестр

Windows XP
Перейдите Пуск > Выполнить и в текстовом поле наберите команду regedit, нажмите enter, должно открыться следующее окно:

Windows Vista/W7
Перейдите Пуск> Все программы>Стандартные > Выполнить и в текстовом поле наберите команду regedit, нажмите enter, должно открыться следующее окно:

postgres-002.jpg

В левой панели откройте папку : HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/pgsql-8.3, см. картинку ниже:

postgres-003.jpg

На картинке красной линией обведен ключ, который нужно изменить. Щелкните правой кнопкой мыши по имени ключа и выберите «Изменить», откроется окно со значением ключа:

«C:/Program Files/PostgreSQL/8.3/bin/pg_ctl.exe» runservice -w -N «pgsql-8.3» -D «C:/Program Files/PostgreSQL/8.3/data/»

Теперь Вам нужно изменить только часть, выделенную жирным шрифтом. Вы переместили базу и должны указать PostgreSQL новый путь, именно он и выделен. Нельзя допустить ошибку в пути, поэтому можно сделать так: открыть в проводнике нашу папку /data и кликнуть правой кнопкой мыши по любому файлу и выбрать Свойства, откроется такое окно:

postgres-004.jpg

В строке «Размещение» будет написан полный путь к папке, который нужно выделить и скопировать. И после этого вставить его вместо выделенной части ключа в реестре. Старый ключ выглядел так:

«C:/Program Files/PostgreSQL/8.3/bin/pg_ctl.exe» runservice -w -N «pgsql-8.3» -D «C:/Program Files/PostgreSQL/8.3/data/»

Должно получиться так:
«C:/Program Files/PostgreSQL/8.3/bin/pg_ctl.exe» runservice -w -N «pgsql-8.3» -D «I:/Program Files/PostgreSQL/8.3/data/»

Это все. Закройте все окна и перезагрузите компьютер.

Если перенесенная база данных работает нормально можно удалить исходную папку /data на диске C, если Вы не сделали этого раньше.

Join @AdmNtsRu on Telegram

Смотрите также:

После установки PostgreSQL создаваемые ИБ будут размещаться в каталоге по умолчанию. Как правило необходимо предусмотреть размещение БД на другом диске.

Например целесообразно разместить рабочие ИБ, индексы или отдельные таблицы на более быстром SSD, а тестовые ИБ или редко используемые таблицы на менее быстрых дисках.

Содержание

  1. Задача
  2. Решение
  3. Создание табличного пространства
  4. Перенос БД в другое табличное пространтсво

Задача

Имеется сервер с ОС Debian 9, на сервере установлен PostgreSQL 9.6.  К серверу есть доступ через SSH и pgAdmin.

Организовать возможность расположения БД на другом диске, в каталоге /mnt/POINT_01/pg_base/, и перенести ИБ alt_production в этот каталог.

Решение

Для определения расположения файлов на дисках в PostgreSQL есть понятие Табличное пространство(TABLSEPACE). Разные табличные пространства можно размещать как на разных, так и на одном диске, хотя в последнем смысла не так много.

По умолчанию создается табличное пространство pg_default, у меня для версии 9.6 размещен в каталоге /var/lib/postgresql/9.6/main/base/.

Создание табличного пространства

Для создания табличного пространства необходимо заранее создать каталог в котором оно будет храниться, пользоватеть от которого запущена служба сервера PostgreSQL должен быть владельцем, катлог должен быть пустым.

По условию задачи  табличное пространство необходимо разместить в каталоге /mnt/POINT_01/pg_base/, создаем его и пользователя postgres сделаем владельцем

# mkdir /mnt/POINT_01/pg_base
# chown -R postgres:postgres /mnt/POINT_01/pg_base

Для дальнейших действий необходимо подключиться к сервру через pgAdmin или воспользоаться оболочкой psql. В pgAdmin можно выполнять команды графически так и запросами, в psql только запросами. Буду описывать графический вариант, а затем запрос, кторая выполнит теже действия.

Теперь создадим новое табличное пространство, назовем его point_01, в pgAdmin разворачиваем ветку Табличные пространства.

PostgreSQL. Размещение БД на другом диске

В ветке по нажатию ПКМ откроется меню, выбираем пункт Новый tablespace, в появившейся форме указываем название и местонахождение, и нажимаем кнопку OK. В ветке появится созданное тобличное пространство.

PostgreSQL. Размещение БД на другом диске

Запрос:

CREATE TABLESPACE point_01 LOCATION '/mnt/DEPOT_01/pg_base'

Перенос БД в другое табличное пространтсво

В ветке БД кликаем ПКМ по нужной ИБ, переходим в свойства на закладу Определение и выбираем необходимое табличное простарнство, и нажимаем кнопку OK.

PostgreSQL. Размещение БД на другом диске

После некоторого ожидания диалог закроется, база перенесена в другое табличное пространство.

Запрос:

ALTER DATABASE alt_production SET TABLESPACE point_01

Если c БД были установлены соединения, то выведется сообщение об шибке, например:

ОШИБКА: база данных "alt_production " занята другими пользователями
DETAIL: Эта база данных используется ещё в 1 сеансе.
********** Ошибка **********

ОШИБКА: база данных "alt_production " занята другими пользователями
SQL-состояние: 55006
Подробности: Эта база данных используется ещё в 1 сеансе.

Для завершения всех соединений с БД необходимо выполнить запрос описанный ниже и повторить перенос:

SELECT pg_terminate_backend (pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'alt_production ';

Источники: postgrespro.ru, unix.freegeek.ru

Понравилась статья? Поделить с друзьями:
  • Powershell error view
  • Powershell error variable
  • Powershell error handling
  • Powershell error clear
  • Powershell error action