Postgresql папка для хранения бд windows

73.1. Database File Layout This section describes the storage format at the level of files and directories. Traditionally, the configuration and …

This section describes the storage format at the level of files and directories.

Traditionally, the configuration and data files used by a database cluster are stored together 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 server instances, can exist on the same machine.

The PGDATA directory contains several subdirectories and control files, as shown in Table 73.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 it is possible to place them elsewhere.

Table 73.1. Contents of PGDATA

Item Description
PG_VERSION A file containing the major version number of PostgreSQL
base Subdirectory containing per-database subdirectories
current_logfiles File recording the log file(s) currently written to by the logging collector
global Subdirectory containing cluster-wide tables, such as pg_database
pg_commit_ts Subdirectory containing transaction commit timestamp data
pg_dynshmem Subdirectory containing files used by the dynamic shared memory subsystem
pg_logical Subdirectory containing status data for logical decoding
pg_multixact Subdirectory containing multitransaction status data (used for shared row locks)
pg_notify Subdirectory containing LISTEN/NOTIFY status data
pg_replslot Subdirectory containing replication slot data
pg_serial Subdirectory containing information about committed serializable transactions
pg_snapshots Subdirectory containing exported snapshots
pg_stat Subdirectory containing permanent files for the statistics subsystem
pg_stat_tmp Subdirectory containing temporary files for the statistics subsystem
pg_subtrans Subdirectory containing subtransaction status data
pg_tblspc Subdirectory containing symbolic links to tablespaces
pg_twophase Subdirectory containing state files for prepared transactions
pg_wal Subdirectory containing WAL (Write Ahead Log) files
pg_xact Subdirectory containing transaction commit status data
postgresql.auto.conf A file used for storing configuration parameters that are set by ALTER SYSTEM
postmaster.opts A file recording the command-line options the server was last started with
postmaster.pid A lock file recording the current postmaster process ID (PID), cluster data directory path, postmaster start timestamp, port number, Unix-domain socket directory path (could be empty), first valid listen_address (IP address or *, or empty if not listening on TCP), and shared memory segment ID (this file is not present after server 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.

Note that the following sections describe the behavior of the builtin heap table access method, and the builtin index access methods. Due to the extensible nature of PostgreSQL, other access methods might work differently.

Each table and index is stored in a separate file. For ordinary relations, these files are named after the table or index’s filenode number, which can be found in pg_class.relfilenode. But for temporary relations, the file name is of the form tBBB_FFF, where BBB is the backend ID of the backend which created the file, and FFF is the filenode number. In either case, in addition to the main file (a/k/a main fork), each table and index has a free space map (see Section 73.3), which stores information about free space available in the relation. The free space map is stored in a file named with the filenode number plus the suffix _fsm. Tables also have a visibility map, stored in a fork with the suffix _vm, to track which pages are known to have no dead tuples. The visibility map is described further in Section 73.4. Unlogged tables and indexes have a third fork, known as the initialization fork, which is stored in a fork with the suffix _init (see Section 73.5).

Caution

Note that while a table’s filenode often matches its OID, this is not necessarily the case; some operations, like TRUNCATE, REINDEX, CLUSTER and some forms of ALTER TABLE, can change the filenode while preserving the OID. Avoid assuming that filenode and table OID are the same. Also, for certain system catalogs including pg_class itself, pg_class.relfilenode contains zero. The actual filenode number of these catalogs is stored in a lower-level data structure, and can be obtained using the pg_relation_filenode() function.

When a table or index exceeds 1 GB, 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. (Actually, 1 GB is just the default segment size. The segment size can be adjusted using the configuration option --with-segsize when building PostgreSQL.) In principle, free space map and visibility map forks could require multiple segments as well, though this is unlikely to happen in practice.

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 73.2 for more information.

The contents of tables and indexes are discussed further in Section 73.6.

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 (i.e., the location specified in the tablespace’s CREATE TABLESPACE command). This symbolic link is named after the tablespace’s OID. Inside the physical tablespace directory there is a subdirectory with a name that depends on the PostgreSQL server version, such as PG_9.0_201008051. (The reason for using this subdirectory is so that successive versions of the database can use the same CREATE TABLESPACE location value without conflicts.) Within the version-specific subdirectory, there is a subdirectory for each database that has elements in the tablespace, named after the database’s OID. Tables and indexes are stored within that directory, using 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.

The pg_relation_filepath() function shows the entire path (relative to PGDATA) of any relation. It is often useful as a substitute for remembering many of the above rules. But keep in mind that this function just gives the name of the first segment of the main fork of the relation — you may need to append a segment number and/or _fsm, _vm, or _init to find all the files associated with the relation.

Temporary files (for operations such as sorting more data than can fit in memory) are created within PGDATA/base/pgsql_tmp, or within a pgsql_tmp subdirectory of a tablespace directory if a tablespace other than pg_default is specified for them. The name of a temporary file has the form pgsql_tmpPPP.NNN, where PPP is the PID of the owning backend and NNN distinguishes different temporary files of that backend.

Where are the files for a PostgreSQL database stored?

Asclepius's user avatar

Asclepius

54.4k16 gold badges157 silver badges139 bronze badges

asked Jul 16, 2009 at 11:55

Teifion's user avatar

2

To see where the data directory is, use this query.

show data_directory;

To see all the run-time parameters, use

show all;

You can create tablespaces to store database objects in other parts of the filesystem. To see tablespaces, which might not be in that data directory, use this query.

SELECT *, pg_tablespace_location(oid) FROM pg_tablespace;

SukiCZ's user avatar

SukiCZ

1824 silver badges9 bronze badges

answered Nov 23, 2011 at 4:53

Mike Sherrill 'Cat Recall''s user avatar

6

On Windows7 all the databases are referred by a number in the file named pg_database under C:Program Files (x86)PostgreSQL8.2dataglobal. Then you should search for the folder name by that number under C:Program Files (x86)PostgreSQL8.2database. That is the content of the database.

the Tin Man's user avatar

the Tin Man

157k41 gold badges211 silver badges300 bronze badges

answered Mar 9, 2012 at 7:02

senthilkumari's user avatar

4

Open pgAdmin and go to Properties for specific database. Find OID and then open directory

<POSTGRESQL_DIRECTORY>/data/base/<OID>

There should be your DB files.

answered Oct 27, 2012 at 12:22

Almir Sarajčić's user avatar

Almir SarajčićAlmir Sarajčić

1,4902 gold badges18 silver badges19 bronze badges

1

Under my Linux installation, it’s here: /var/lib/postgresql/8.x/

You can change it with initdb -D "c:/mydb/"

trinth's user avatar

trinth

5,8479 gold badges38 silver badges45 bronze badges

answered Jul 16, 2009 at 11:59

Sadegh's user avatar

SadeghSadegh

6,5544 gold badges33 silver badges44 bronze badges

2

Everyone already answered but just for the latest updates. If you want to know where all the configuration files reside then run this command in the shell

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

answered Dec 8, 2017 at 3:25

Saad Saadi's user avatar

Saad SaadiSaad Saadi

1,03110 silver badges26 bronze badges

1

I’d bet you’re asking this question because you’ve tried pg_ctl start and received the following error:

pg_ctl: no database directory specified and environment variable PGDATA unset

In other words, you’re looking for the directory to put after -D in your pg_ctl start command.

In this case, the directory you’re looking for contains these files.

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

You can locate it by locating any of the files and directories above using the search provided with your OS.

For example in my case (a HomeBrew install on Mac OS X), these files are located in /usr/local/var/postgres. To start the server I type:

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

… and it works.

answered Aug 17, 2015 at 16:33

xagg's user avatar

xaggxagg

5105 silver badges11 bronze badges

3

Postgres stores data in files in its data directory. Follow the steps below to go to a database and its files:

The database corresponding to a postgresql table file is a directory. The location of the entire data directory can be obtained by running SHOW data_directory.
in a UNIX like OS (eg: Mac) /Library/PostgreSQL/9.4/data
Go inside the base folder in the data directory which has all the database folders: /Library/PostgreSQL/9.4/data/base

Find the database folder name by running (Gives an integer. This is the database folder name):

SELECT oid from pg_database WHERE datname = <database_name>;

Find the table file name by running (Gives an integer. This is the file name):

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

This is a binary file. File details such as size and creation date time can be obtained as usual. For more info read this SO thread

Community's user avatar

answered Jun 10, 2015 at 16:04

picmate 涅's user avatar

picmate 涅picmate 涅

3,7835 gold badges42 silver badges50 bronze badges

The location of specific tables/indexes can be adjusted by TABLESPACEs:

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

the Tin Man's user avatar

the Tin Man

157k41 gold badges211 silver badges300 bronze badges

answered Jul 16, 2009 at 12:14

ymv's user avatar

ymvymv

2,10313 silver badges20 bronze badges

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

The directory can’t be entered, but you can look at the content via: sudo du -hc data

answered Mar 1, 2011 at 3:33

evgeni's user avatar

evgenievgeni

1,6353 gold badges22 silver badges29 bronze badges

6

picmate’s answer is right. on windows the main DB folder location is (at least on my installation)

C:PostgreSQL9.2database

and not in program files.

his 2 scripts, will give you the exact directory/file(s) you need:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

mine is in datname 16393 and relfilenode 41603

database files in postgresql

answered Mar 28, 2019 at 0:25

k3nn's user avatar

k3nnk3nn

1211 silver badge6 bronze badges

1

On Windows, the PGDATA directory that the PostgresSQL docs describe is at somewhere like C:Program FilesPostgreSQL8.1data. The data for a particular database is under (for example) C:Program FilesPostgreSQL8.1database100929, where I guess 100929 is the database number.

answered Sep 14, 2009 at 22:01

Ben Hoyt's user avatar

Ben HoytBen Hoyt

10.4k5 gold badges58 silver badges84 bronze badges

3

I’m running postgres (9.5) in a docker container (on CentOS, as it happens), and as Skippy le Grand Gourou mentions in a comment above, the files are located in /var/lib/postgresql/data/.

$ docker exec -it my-postgres-db-container bash
root@c7d61efe2a5d:/# cd /var/lib/postgresql/data/
root@c7d61efe2a5d:/var/lib/postgresql/data# ls -lh
total 56K
drwx------. 7 postgres postgres   71 Apr  5  2018 base
drwx------. 2 postgres postgres 4.0K Nov  2 02:42 global
drwx------. 2 postgres postgres   18 Dec 27  2017 pg_clog
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_commit_ts
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_dynshmem
-rw-------. 1 postgres postgres 4.4K Dec 27  2017 pg_hba.conf
-rw-------. 1 postgres postgres 1.6K Dec 27  2017 pg_ident.conf
drwx------. 4 postgres postgres   39 Dec 27  2017 pg_logical
drwx------. 4 postgres postgres   36 Dec 27  2017 pg_multixact
drwx------. 2 postgres postgres   18 Nov  2 02:42 pg_notify
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_replslot
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_serial
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_snapshots
drwx------. 2 postgres postgres    6 Sep 16 21:15 pg_stat
drwx------. 2 postgres postgres   63 Nov  8 02:41 pg_stat_tmp
drwx------. 2 postgres postgres   18 Oct 24  2018 pg_subtrans
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_tblspc
drwx------. 2 postgres postgres    6 Dec 27  2017 pg_twophase
-rw-------. 1 postgres postgres    4 Dec 27  2017 PG_VERSION
drwx------. 3 postgres postgres   92 Dec 20  2018 pg_xlog
-rw-------. 1 postgres postgres   88 Dec 27  2017 postgresql.auto.conf
-rw-------. 1 postgres postgres  21K Dec 27  2017 postgresql.conf
-rw-------. 1 postgres postgres   37 Nov  2 02:42 postmaster.opts
-rw-------. 1 postgres postgres   85 Nov  2 02:42 postmaster.pid

answered Nov 8, 2019 at 2:51

rotarydial's user avatar

rotarydialrotarydial

2,0712 gold badges20 silver badges26 bronze badges

A single Terminal command: pg_lsclusters, (using Ubuntu)

What you need is under Data directory:

Ver Cluster Port Status Owner    Data directory               Log file
10  main    5432 online postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log
11  main    5433 online postgres /var/lib/postgresql/11/main  /var/log/postgresql/postgresql-11-main.log

answered Aug 18, 2021 at 19:55

Roko's user avatar

RokoRoko

1,21311 silver badges21 bronze badges

Перенести базы PostgreSQL на другой диск Windows

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

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

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

Заходим в сервисы

Нажимаем WIN+R, и вводим команду

[code]services.msc[/code]

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

посмотреть команду запуска.

Свойства службы postgres

В сущности необходимо будет поменять параметр после ключа -D

Заходим в реестр

Нажимаем WIN+R, и вводим команду

[code]regedit[/code]

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

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services

Меняем ключ реестра 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

  • Копируем/перемещаем базы из старого места в новое
  • Запускаем службу

    Для 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 создаваемые ИБ будут размещаться в каталоге по умолчанию. Как правило необходимо предусмотреть размещение БД на другом диске.

Например целесообразно разместить рабочие ИБ, индексы или отдельные таблицы на более быстром 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

12 ответов

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

show data_directory;

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

show all;

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

SELECT * FROM pg_tablespace;

Mike Sherrill ‘Cat Recall’
23 нояб. 2011, в 06:46

Поделиться

В Windows7 все базы данных относятся к числу в файле с именем pg_database под C:Program Files (x86)PostgreSQL8.2dataglobal. Затем вы должны искать имя папки по этому номеру в C:Program Files (x86)PostgreSQL8.2database. Это содержимое базы данных.

senthilkumari
09 март 2012, в 07:26

Поделиться

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

<POSTGRESQL_DIRECTORY>/data/base/<OID>

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

Almir Sarajčić
27 окт. 2012, в 12:51

Поделиться

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

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

Sadegh
16 июль 2009, в 12:10

Поделиться

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

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

ymv
16 июль 2009, в 13:26

Поделиться

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 = <database_name>;

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

SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

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

picmate 涅
10 июнь 2015, в 17:33

Поделиться

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

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

evgeni
01 март 2011, в 04:26

Поделиться

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

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

Saad Saadi
08 дек. 2017, в 03:37

Поделиться

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

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

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

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

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

… и он работает.

xagg
17 авг. 2015, в 18:22

Поделиться

В Windows каталог PGDATA, который описывают документы PostgresSQL, находится где-то вроде C:Program FilesPostgreSQL8.1data. Данные для конкретной базы данных находятся (например) в C:Program FilesPostgreSQL8.1database100929, где, как мне кажется, 100929 — это номер базы данных.

Ben Hoyt
14 сен. 2009, в 22:12

Поделиться

Picmate ответ правильный. на windows расположение основной папки БД (по крайней мере на моей установке)

C:PostgreSQL9.2database

а не в программных файлах.

его 2 сценария, даст вам точный каталог/файл вам нужно:

SELECT oid from pg_database WHERE datname = <database_name>;
SELECT relname, relfilenode FROM pg_class WHERE relname = <table_name>; 

мой находится в datname 16393 и relfilenode 41603

Изображение 5096

k3nn
28 март 2019, в 00:40

Поделиться

Ещё вопросы

  • 0Как предвидеть много объектов в массиве — jquery?
  • 0Ошибка при запуске образца pjsip pjsua на Android ndk
  • 1Невозможно анимировать спрайт в Phaser.js
  • 0одно наложение яблока для нескольких триггеров?
  • 1Ошибка Google Finance: неверный литерал
  • 0Как включить файл только один раз / Предотвратить переопределения функций в старом C API из C ++ Program
  • 1Scrapy: как получить печенье от брызг
  • 0как сохранить сервер $ _SERVER [‘REMOTE_ADDR’] как идентификатор в базе данных
  • 1Здоровье противников не уменьшается, а ходы не переворачиваются
  • 1Визуализация dom-узла HTMLImageElement в Preact
  • 0JQuery отправить запрос после отправки формы?
  • 1Как добавить событие WPF treeView Node Click, чтобы получить значение узла
  • 1Как разместить изображение и сообщение на Facebook без использования браузера в Windows Phone7
  • 1Как отобразить арабские данные в FPDF?
  • 1Удалите смежные дубликаты элементов из списка массивов в Java (с panache)
  • 0Синхронизация доступа к ресурсам
  • 0Почему Конфигурация сервера Mysql не настраивает пароль сервера при переустановке установочного файла?
  • 1fabric.js не может выровнять текст с textAlign
  • 0Директива для директивной связи с использованием ng-transclude и требует
  • 1Flower — Инструмент мониторинга асинхронных задач Celery — Веб-API Flask / Docker
  • 1Генерация триплетов из кадра данных Pandas
  • 1Как изменить, чтобы панели с вкладками менялись каждые несколько секунд?
  • 0Страница перенаправления AngularJS
  • 1Начиная с Android
  • 1Поиск преемника Inorder в бинарном дереве поиска [дубликаты]
  • 1Перенаправление Spring Security 3.1 на вход в систему не работает, когда происходит вызов метода сервлета (контроллера) после истечения времени ожидания
  • 1Python регулярное выражение вырезать строку шаблона
  • 0Передача данных в send.php — выберите текст опции и значение
  • 1Почему метод OnStart () из ServiceBase имеет параметр arguments?
  • 1FileNotFoundException при попытке прочитать файл, который я написал
  • 0AngularJS: формат ввода даты
  • 1Динамически добавлять фильтр сервлетов в приложение Grails
  • 1Как установить обои в Android? [Дубликат]
  • 1Установите вызов Moq для защищенного виртуального метода, который ожидает Func и возвращает IEnumerable
  • 0Переадресация нагрузки nginx 404
  • 0Jquery скрипт занимает очень очень много времени
  • 0Как мне избавиться от пустого пространства по бокам моего сайта? Повторите фон? изменить размер div? Я заблудился
  • 0Прокрутка страниц с использованием JavaScript
  • 0MySQL не хранит микросекунды в datetime, но использует в где условия?
  • 0Пограничные пиксели перекрываются
  • 0Angular JS получает доступ к данным контроллера из фильтра
  • 1Как получить ADB Remount для работы?
  • 0Не удается получить поля для размещения в одной строке с помощью CSS
  • 1Добавление записей в столбцы даты и времени Pandas в Python
  • 0JavaScript getElementById с переменными
  • 1RavenDB плохо работает с областью транзакций
  • 0получить данные xml elemnts с помощью php
  • 0Angularjs — угловая 1.4.4 нг-модель на выборочном поле возвращает недопустимые значения
  • 0скрыть элементы в iframe от родителя, если у iframe нет идентификатора
  • 1Использование лямбда-выражения для назначения данных ViewModel в запросе с использованием .Find ()

Если у вас установлен 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

Как заблокировать обновление пакета в Ubuntu?

Иногда необходимо запретить обновление какого-нибудь пакет из нестабильного репозитория. Для этого есть 2 решения: грубое — отключить репозитарий, элегантное — заморозить обновление отдельного пакета.

Команда, чтобы заблокировать обновление пакета:

sudo apt-mark hold имя_пакета

Команда, чтобы разблокировать обновление пакета:

sudo apt-mark unhold имя_пакета

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

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

Разница между «service restart» и «service reload»

restart = stop + start, в свою очередь reload = перечитать файлы конфигурации не прерывая работы

Нечитаемый синий цвет в vim через Putty

Инструкция по изменение цветовой схемы текстового редактора vim для комфортной работы через putty клиент.

Ubuntu. Запускать Chrome с флагами из GUI

Алгоритм настройки Chrome для запуска из меню приложений с флагами

Open Windows Terminal in current folder

Add setting "startingDirectory": "." in terminal profile CTRL + ,

Как мне перенести базу данных 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

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

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

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

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

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

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

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

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

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

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

… и это работает.

Понравилась статья? Поделить с друзьями:
  • Postgresql открыть доступ по сети windows
  • Portal 2 для windows 10 скачать торрент
  • Postgresql не устанавливается на windows 2008
  • Portal 2 вылетает при запуске windows 10
  • Portable программа pdf transformer для windows 10 скачать