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:
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.
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.
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]]
Если у вас установлен Postgres в конфигурации по умолчанию, то его базы хранятся в Program Files. Если есть необходимость освободить место на системном диске C, то можно перенести базы данных Postgres на другой диск. Общий алгоритм такой (включая linux системы):
- Останавливаем сервис СУБД
- Перемещаем базы
- Меняем конфиг postgres
- Запускаем сервис СУБД
Для Windows системы:
Заходим в сервисы
Нажимаем WIN+R, и вводим команду
[code]services.msc[/code]
Отключаем службу, относяющуюся к СУБД, например postgresql-x64-9.6 – PostgreSQL Server 9.6. В свойствах службы можно
посмотреть команду запуска.
В сущности необходимо будет поменять параметр после ключа -D
Заходим в реестр
Нажимаем WIN+R, и вводим команду
[code]regedit[/code]
Ищем ветку служб Windows и наш сервис СУБД, например postgresql-x64-9.6 – PostgreSQL Server 9.6
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
Меняем ключ реестра ImagePath.
Допустим надо указать папку 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
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу
Для linux системы:
- Отключаем службу, относяющуюся к СУБД
[code]/etc/init.d/postgresql stop[/code]
- В конфигурационном файле /etc/init.d/postgresql меняем содержимое переменной $PGDATA
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу, относяющуюся к СУБД
[code]/etc/init.d/postgresql start[/code]
Ссылка по теме:
- How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04
В PostgreSQL область хранения баз данных на диске принято называть кластер баз данных. Кластер баз данных представляет собой набор баз, управляемых одним экземпляром работающего сервера. Он должен быть проинициализирован перед первым запуском сервера.
С точки зрения файловой системы, кластер баз данных представляет собой один каталог, в котором будут храниться все данные. Где именно хранить данные, вы абсолютно свободно можете выбирать сами. Какого-либо стандартного пути не существует, но часто данные размещаются в /usr/local/pgsql/data
.
Для инициализации кластера баз данных применяется команда initdb
. Расположение кластера в файловой системе задаётся параметром -D
, например:
$ initdb -D /usr/local/pgsql/data
Настройки кластера баз данных (вместе с другими параметрами сервера) описываются в файле postgresql.conf
.
Теперь про расположение файлов. Например, на моём Debian’е при версии PostgreSQL 9.4 кластер баз данных инициализирован в /var/lib/postgresql/9.4/main
, а файл настроек расположен /etc/postgresql/9.4/main/postgresql.conf
.
Список созданных в кластере баз данных можно просмотреть, например, при помощи команды psql
:
$ psql -U postgres --list
P.S. Надеюсь на людей, более сведующих, которые дополнят ответ, указав где обычно располагаются файлы PostgreSQL в Windows.
Если у вас установлен Postgres в конфигурации по умолчанию, то его базы хранятся в Program Files. Если есть необходимость освободить место на системном диске C, то можно перенести базы данных Postgres на другой диск. Общий алгоритм такой (включая linux системы):
- Останавливаем сервис СУБД
- Перемещаем базы
- Меняем конфиг postgres
- Запускаем сервис СУБД
Для Windows системы:
- Заходим в сервисы
Нажимаем WIN+R, и вводим командуservices.msc
Отключаем службу, относяющуюся к СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6. В свойствах службы можно посмотреть команду запуска. В сущности необходимо будет поменять параметр после ключа -D
- Заходим в реестр
Нажимаем WIN+R, и вводим командуregedit
Ищем ветку служб Windows и наш сервис СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
- Меняем ключ реестра ImagePath.
Допустим надо указать папку 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
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу
Для linux системы:
- Отключаем службу, относяющуюся к СУБД
/etc/init.d/postgresql stop
- В конфигурационном файле /etc/init.d/postgresql меняем содержимое переменной $PGDATA
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу, относяющуюся к СУБД
/etc/init.d/postgresql start
Ссылка по теме:
- How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04
Ubuntu. В разделе /boot не осталось места.
Недавно столкнулся с проблемой, что система ubuntu не может обновиться. Пишет ошибки про неудвлетворенные зависимости и не дает возможности завершится командам.
Ошибка CredSSP при подключении по RDP
Устранение ошибки подключения по RDP связанное с установкой обновлений CredSSP для уязвимости CVE-2018-0886
Python to exe
Про конвертер .py в .exe с использованием простого графического интерфейса, созданного с использованием Eel и PyInstaller в Python
Linux. Создание файла определённого размера
создание файла без реальной записи данных
fallocate -l 2G filename.ext
или (медленный вариант)
user@ubuntu:~$ dd if=/dev/zero of=filname.ext bs=100M count=5
5+0 записей считано
5+0 записей написано
скопировано 524288000 байт (524 MB), 3,09439 c, 169 MB/c
- https://tyapk.ru/blog/post/tretya-laba-os
Ubuntu. Запускать Chrome с флагами из GUI
Алгоритм настройки Chrome для запуска из меню приложений с флагами
Lets Encrypt Wildcard SSL вручную
Определение wildcard SSL. Краткий список шагов ручного получения бесплатного wildcard SSL-сертификат от Lets Encrypt на примере CentOS 7 и утилиты acme.sh
Как мне перенести базу данных PostgreSQL на новый жесткий диск?
Если у Вас PostgreSQL установлен на системном диске C, но вы хотите переместить базы данных на другой раздел или внешний жесткий диск, т.к на диске C мало места, это может быть сделано без переустановки PostgreSQL.
Первым делом, остановите службу PostgreSQL на время переноса.
Windows XP
Пуск > Панель Управления> Администрирование > Службы
Windows Vista/W7
Пуск > Поиск > Службы
Вам нужно, чтобы открылось такое окно:
Щелкните правой кнопкой мыши по службе 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, должно открыться следующее окно:
В левой панели откройте папку : HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/pgsql-8.3, см. картинку ниже:
На картинке красной линией обведен ключ, который нужно изменить. Щелкните правой кнопкой мыши по имени ключа и выберите «Изменить», откроется окно со значением ключа:
«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 и кликнуть правой кнопкой мыши по любому файлу и выбрать Свойства, откроется такое окно:
В строке «Размещение» будет написан полный путь к папке, который нужно выделить и скопировать. И после этого вставить его вместо выделенной части ключа в реестре. Старый ключ выглядел так:
«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, а тестовые ИБ или редко используемые таблицы на менее быстрых дисках.
Содержание
- Задача
- Решение
- Создание табличного пространства
- Перенос БД в другое табличное пространтсво
Задача
Имеется сервер с ОС 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 разворачиваем ветку Табличные пространства.
В ветке по нажатию ПКМ откроется меню, выбираем пункт Новый tablespace, в появившейся форме указываем название и местонахождение, и нажимаем кнопку OK. В ветке появится созданное тобличное пространство.
Запрос:
CREATE TABLESPACE point_01 LOCATION '/mnt/DEPOT_01/pg_base'
Перенос БД в другое табличное пространтсво
В ветке БД кликаем ПКМ по нужной ИБ, переходим в свойства на закладу Определение и выбираем необходимое табличное простарнство, и нажимаем кнопку OK.
После некоторого ожидания диалог закроется, база перенесена в другое табличное пространство.
Запрос:
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
1 августа, 2022 12:21 пп
273 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
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the
current
version, or one of the other supported versions listed above instead.
Chapter 49. Database
Physical Storage
This chapter provides an overview of the physical storage
format used by PostgreSQL
databases.
49.1. Database File Layout
This section describes the storage format at the level of
files and directories.
All the data needed for a database cluster is stored within
the cluster’s data directory, commonly referred to as
PGDATA (after the name of the
environment variable that can be used to define it). A common
location for PGDATA is /var/lib/pgsql/data. Multiple clusters, managed
by different postmasters, can exist on the same machine.
The PGDATA directory contains
several subdirectories and control files, as shown in Table 49-1. In
addition to these required items, the cluster configuration
files postgresql.conf, pg_hba.conf, and pg_ident.conf are traditionally stored in
PGDATA (although beginning in
PostgreSQL 8.0 it is possible
to keep them elsewhere).
Table 49-1. Contents of PGDATA
Item | Description |
---|---|
PG_VERSION | A file containing the major version number of PostgreSQL |
base | Subdirectory containing per-database subdirectories |
global | Subdirectory containing cluster-wide tables, such as pg_database |
pg_clog | Subdirectory containing transaction commit status data |
pg_subtrans | Subdirectory containing subtransaction status data |
pg_tblspc | Subdirectory containing symbolic links to tablespaces |
pg_xlog | Subdirectory containing WAL (Write Ahead Log) files |
postmaster.opts | A file recording the command-line options the postmaster was last started with |
postmaster.pid | A lock file recording the current postmaster PID and shared memory segment ID (not present after postmaster shutdown) |
For each database in the cluster there is a subdirectory
within PGDATA/base, named after the database’s OID in
pg_database. This subdirectory is
the default location for the database’s files; in particular,
its system catalogs are stored there.
Each table and index is stored in a separate file, named
after the table or index’s filenode
number, which can be found in pg_class.relfilenode.
Caution |
Note that while a table’s filenode often matches its |
When a table or index exceeds 1Gb, it is divided into
gigabyte-sized segments. The first
segment’s file name is the same as the filenode; subsequent
segments are named filenode.1, filenode.2, etc. This
arrangement avoids problems on platforms that have file size
limitations. The contents of tables and indexes are discussed
further in Section
49.3.
A table that has columns with potentially large entries will
have an associated TOAST table, which
is used for out-of-line storage of field values that are too
large to keep in the table rows proper. pg_class.reltoastrelid links from a table to its
TOAST table, if any. See
Section 49.2 for more
information.
Tablespaces make the scenario more complicated. Each
user-defined tablespace has a symbolic link inside the
PGDATA/pg_tblspc directory, which points to the
physical tablespace directory (as specified in its CREATE TABLESPACE command). The symbolic link is
named after the tablespace’s OID. Inside the physical
tablespace directory there is a subdirectory for each database
that has elements in the tablespace, named after the database’s
OID. Tables within that directory follow the filenode naming
scheme. The pg_default tablespace is
not accessed through pg_tblspc, but
corresponds to PGDATA/base. Similarly, the pg_global tablespace is not accessed through
pg_tblspc, but corresponds to
PGDATA/global.