Où PostgreSQL stocke-t-il la base de données?

Réponses:

355

Pour voir où se trouve le répertoire de données, utilisez cette requête.

show data_directory;

Pour voir tous les paramètres d'exécution, utilisez

show all;

Vous pouvez créer des espaces de table pour stocker des objets de base de données dans d'autres parties du système de fichiers. Pour voir les espaces disque logiques, qui ne se trouvent peut-être pas dans ce répertoire de données, utilisez cette requête.

SELECT * FROM pg_tablespace;
Mike Sherrill 'Cat Recall'
la source
1
show data_directory; commande pointe vers l'emplacement exact des données. La recherche d'un dossier spécifique est pénible car quelqu'un d'autre peut l'avoir installé pour vous et maintenant vous ne connaissez pas la configuration, donc suivre sql permet de gagner du temps. :) Merci Mike.
Vishal
3
Il dit « doit être super - utilisateur d'examiner le répertoire de données » :(
temporary_user_name
5
Si vous n'êtes pas un DBA, vous n'avez pas vraiment besoin de savoir de toute façon.
Mike Sherrill «Cat Recall»
8
BTW - si quelqu'un cherche l'emplacement de la base de données pour Postgres.app sur un Mac comme je l'étais, c'est par défaut dans ~ / Library / Application Support / Postgres [ver] / var.
sstringer
1
Pour exécuter une requête, utilisez PGAdmin III et utilisez l'icône "exécuter une requête" dans la barre de menus.
Rutger Hofste
61

Sous Windows7, toutes les bases de données sont référencées par un numéro dans le fichier nommé pg_databasesousC:\Program Files (x86)\PostgreSQL\8.2\data\global . Ensuite, vous devez rechercher le nom du dossier par ce numéro sous C:\Program Files (x86)\PostgreSQL\8.2\data\base. Voilà le contenu de la base de données.

senthilkumari
la source
3
Ne répondez pas d'une manière spécifique au système d'exploitation, sauf si la question indique explicitement le système d'exploitation.
simonmenke
24
Pourquoi pas? Si vous ne mentionnez pas le système d'exploitation et que vous dites simplement "cela fonctionne", toute personne essayant cela sur un autre système d'exploitation sera confuse. C'est pertinent. EDIT: Oh, vous voulez probablement dire «ne donnez pas du tout de réponse spécifique au système d'exploitation». Je suppose que cela a du sens, je ne sais pas.
David Winiecki
34
@David, La question a probablement été fermée car elle ne précisait pas quel système d'exploitation. (S'il avait spécifié un système d'exploitation, il aurait été fermé pour être trop spécifique.) Votre réponse a été utile et informative - ignorez simplement les opposants et les downvoters jusqu'à ce qu'ils réussissent à détruire finalement SO. Les haineux vont détester, et tout ça.
SamGoody
@SamGoody il y aurait un peu de point à ce que vous disiez, si cette réponse était réellement correcte. (Ce n'est pas strictement incorrect, car le dossier peut être là dans Windows, mais ce n'est certainement pas une donnée). Que ce soit le cas ou non peut être facilement découvert en suivant la réponse déjà donnée.
Jon Hanna
@senthilkumari J'ai postgresql 11 et windows 10. Comme vous l'avez mentionné, j'ai essayé de voir la pg_database dans le dossier global mais je n'en ai pas vu. Je pouvais voir un tas de _vms, _fsm, config_exec_params, pg_control, pg_filenode.map, pg_internal.init. Pour Windows 10, quel fichier nommé dois-je rechercher. Est-ce différent?
Nachiket
29

Ouvrez pgAdmin et accédez aux propriétés d'une base de données spécifique. Recherchez l'OID, puis ouvrez le répertoire

<POSTGRESQL_DIRECTORY>/data/base/<OID>

Il devrait y avoir vos fichiers DB.

Almir Sarajčić
la source
14
SELECT oid from pg_database where datname = '<dbname>'
Charlie
27

Sous mon installation Linux, c'est ici: /var/lib/postgresql/8.x/

Vous pouvez le changer avec initdb -D "c:/mydb/"

Sadegh
la source
12
Dépend de la distribution - pour Fedora 20, c'est moins /var/lib/pgsql/data. Mieux vaut découvrir en utilisant ps auxw|grep postgres|grep -- -D.
Skippy le Grand Gourou
17

L'emplacement de tables / index spécifiques peut être ajusté par TABLESPACEs:

CREATE TABLESPACE dbspace LOCATION '/data/dbs';
CREATE TABLE something (......) TABLESPACE dbspace;
CREATE TABLE otherthing (......) TABLESPACE dbspace;
ymv
la source
15

Tout le monde a déjà répondu, mais juste pour les dernières mises à jour. Si vous voulez savoir où résident tous les fichiers de configuration, exécutez cette commande dans le shell

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
Saad Saadi
la source
14

Je parie que vous posez cette question parce que vous avez essayé pg_ctl startet reçu l'erreur suivante:

pg_ctl: aucun répertoire de base de données spécifié et variable d'environnement PGDATA non définie

En d'autres termes, vous recherchez le répertoire à placer -Ddans votre pg_ctl startcommande.

Dans ce cas, le répertoire que vous recherchez contient ces fichiers.

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

Vous pouvez le localiser en localisant l'un des fichiers et répertoires ci-dessus à l'aide de la recherche fournie avec votre système d'exploitation.

Par exemple dans mon cas (une installation HomeBrew sur Mac OS X ), ces fichiers se trouvent dans /usr/local/var/postgres. Pour démarrer le serveur que je tape:

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

... et il fonctionne.

xagg
la source
1
Si vous utilisez un homebrew, un moyen plus facile de localiser ces données est tout simplementbrew info postgres
Ben
Vous avez raison sur la raison pour laquelle je recherche le dossier de la base de données. Mais la chose est que je ne peux pas trouver l'un des fichiers ci-dessus aveclocate <filename>
aswin prabhakar
sudo locate <filename>
Je les ai
14

Postgres stocke les données dans des fichiers dans son répertoire de données. Suivez les étapes ci-dessous pour accéder à une base de données et ses fichiers:

La base de données correspondant à un fichier de table postgresql est un répertoire. L'emplacement de l'ensemble du répertoire de données peut être obtenu en exécutant SHOW data_directory. dans un système d'exploitation UNIX (par exemple: Mac) /Library/PostgreSQL/9.4/data Allez dans le dossier de base dans le répertoire de données qui contient tous les dossiers de la base de données:/Library/PostgreSQL/9.4/data/base

Recherchez le nom du dossier de la base de données en exécutant (Donne un entier. Il s'agit du nom du dossier de la base de données):

SELECT oid from pg_database WHERE datname = <database_name>;

Recherchez le nom du fichier table en exécutant (Donne un entier. Il s'agit du nom du fichier):

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

Ceci est un fichier binaire. Les détails du fichier tels que la taille et la date de création peuvent être obtenus comme d'habitude. Pour plus d'informations, lisez ce fil SO

picmate 涅
la source
11

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

Le répertoire ne peut pas être saisi, mais vous pouvez consulter le contenu via: sudo du -hc data

evgeni
la source
13
Si vous avez installé via homebrew (? Et pourquoi pas vous), il serait dans /usr/local/var/postgreslequel vous pouvez découvrir en utilisant @ MikeSherrill de show data_directory;la pointe
Beck Chris
/Library/PostgreSQL/9.0/data/basesemble être un emplacement plus proche de Mac que /usr/local/var/postgres. Vous ne pouvez pas accéder à ce dernier dans le Finder sans activer les fonctionnalités cachées du Finder.
Charlie
@Charlie Vous pouvez naviguer à l'aide du Finder dans le menu Aller. Aller> Aller au dossier ..., ou ⇧⌘G
Jason S
@JasonS Oui, vous pouvez utiliser cette astuce pour ouvrir le dossier non similaire à Mac dans le Finder.
Charlie
1
Dans mon cas, c'est dans: / Users / bob / Library / Application Support / Postgres / var-9.5
Bwyss
7

Sous Windows, le répertoire PGDATA décrit par les documents PostgresSQL se trouve quelque part comme C:\Program Files\PostgreSQL\8.1\data. Les données pour une base de données particulière sont sous (par exemple) C:\Program Files\PostgreSQL\8.1\data\base\100929, où je suppose que 100929 est le numéro de la base de données.

Ben Hoyt
la source
1
Attention: si vous souhaitez effectuer une sauvegarde au niveau du système de fichiers, ne sauvegardez pas simplement ces répertoires, car, comme le décrivent les documents : "... vous pourriez être tenté d'essayer de sauvegarder ou de restaurer uniquement certaines tables ou bases de données individuelles à partir de leurs répertoires respectifs. fichiers ou répertoires. Cela ne fonctionnera pas car les informations contenues dans ces fichiers ne sont pas utilisables sans les fichiers journaux de validation, pg_clog / *, qui contiennent l'état de validation de toutes les transactions. "
Janis Veinbergs
Cela dépend. Vous auriez pu le configurer dans un dossier différent lors de l'installation.
ANeves
sur le mien, il n'y a pas de dossier de données dans C: \ Program Files \ PostgreSQL \ 9.4 \ est-ce quelque chose de spécifique à 9.4 ou avez-vous fait quelque chose de mal?
LucyViolet
2

la réponse de picmate est juste. sur Windows, l'emplacement du dossier DB principal est (au moins sur mon installation)

C:\PostgreSQL\9.2\data\base\

et non dans les fichiers programme.

ses 2 scripts, vous donneront le répertoire / fichier (s) dont vous avez besoin:

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

le mien est en datname 16393 et ​​relfilenode 41603

fichiers de base de données dans postgresql

k3nn
la source
0

J'exécute postgres (9.5) dans un conteneur docker (sur CentOS, comme cela arrive), et comme Skippy le Grand Gourou le mentionne dans un commentaire ci-dessus, les fichiers sont situés dans /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
cadran rotatif
la source