PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/07/2013 15:39:33

David
Membre

Déterminer le tablespace d'accueil d'un objet

Bonjour.
J'ai qqs soucis pour retrouver le nom du tablespace où sont stockés mes divers objets.
Mes objets étaient auparavant stockés sous "l'arborescence" par défaut.
J'ai créé un tablespace et ai affecté ce tablespace comme emplacement par défaut pour ma base de données.

Après qqs manipulations pour déplacer les objets sous ce nouveau tablespace, j'ai voulu vérifier leur emplacement mais je ne sais pas où trouver l'information.
La colonne "tablespace" de la vue pg_tables m'indique la valeur '0' ce qui semble être la valeur du tablespace par défaut.
Il me semble qu'avant d'avoir modifié la valeur par défaut je voyais bien le nom du tablespace ?

Merci pour vos infos.

PG version 9.2.4

Dernière modification par David (10/07/2013 15:40:18)

Hors ligne

#2 10/07/2013 15:54:30

SQLpro
Membre

Re : Déterminer le tablespace d'accueil d'un objet

J'ai écrit un article sur ce sujet. Vous y trouverez les requêtes nécessaires pour ce faire : Où et comment sont stockées mes données avec PostGreSQL ?

A +


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

#3 10/07/2013 18:04:45

rjuju
Administrateur

Re : Déterminer le tablespace d'accueil d'un objet

Bonjour,

la valeur 0 signifie bien que l'objet se trouve dans le tablespace par défaut (ce qui n'est pas le tablespace pg_default).

Si vous utilisez psql, un  \d nom_table vous affichera le tablespace dans lequel il est stocké. Vous avez également la fonction pg_relation_filepath() qui peut vous afficher le chemin où est stocké le fichier physique d'un objet en partant du répertoire $PGDATA.

Hors ligne

#4 11/07/2013 08:58:36

David
Membre

Re : Déterminer le tablespace d'accueil d'un objet

Bonjour à tous et merci pour vos réponses.

Rjuju, ni le \d, \d+, \dt, \dt+ ne me donnent le nom du tablespace sur ma config (9.2.4) ?
Effectivement la fonction pg_relation_filepath() peut aider mais il va falloir que je l'encapsule car on n'obtient pas le nom du tablespace à la première lecture.

bde=# select  pg_relation_filepath('img.tab1');
             pg_relation_filepath
----------------------------------------------
pg_tblspc/17917/PG_9.2_201204301/17915/28553

bash-4.1$ ll /base/data/pg_tblspc
total 0
lrwxrwxrwx 1 postgres postgres 16 Jul 10 09:33 17917 -> /base/ts_1


SQLPro, merci pour la doc. Très intéressante.
Juste une petite remarque, certaines requêtes ne passent plus en 9.2 à cause de la colonne pg_tablespace.spclocation qui n'existe plus.

David.

Hors ligne

#5 11/07/2013 10:31:53

rjuju
Administrateur

Re : Déterminer le tablespace d'accueil d'un objet

Cela fonctionne pour moi. Comment avez-vous modifié le tablespace ?

postgres=# select version();
                                                  version                                                   
------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
(1 ligne)

Temps : 65,957 ms
postgres=# create tablespace mon_tablespace location '/var/lib/postgresql/mon_tablespace';
CREATE TABLESPACE
Temps : 19,768 ms
postgres=# create table test_tablespace (id integer) tablespace mon_tablespace;
CREATE TABLE
Temps : 33,691 ms
postgres=# \d test_tablespace
 Table « public.test_tablespace »
 Colonne |  Type   | Modificateurs 
---------+---------+---------------
 id      | integer | 
Tablespace : « mon_tablespace »

Hors ligne

#6 11/07/2013 10:46:33

David
Membre

Re : Déterminer le tablespace d'accueil d'un objet

bde=>  create table test_david (col1 numeric);
CREATE TABLE
OU
bde=>  create table test_david (col1 numeric) tablespace  ts_1;
CREATE TABLE

Résultats identiques

bde=> \d test_david
  Table "public.test_david"
Column |  Type   | Modifiers
--------+---------+-----------
col1   | numeric |


bde=> \d+ test_david
                      Table "public.test_david"
Column |  Type   | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
col1   | numeric |           | main    |              |
Has OIDs: no


bde=> \dt+ test_david
                       List of relations
Schema |    Name    | Type  | Owner |    Size    | Description
--------+------------+-------+-------+------------+-------------
public | test_david | table | bde   | 8192 bytes |
(1 row)


Par contre la base de données dans laquelle j'ai créé cette table a été créée sur ce tablespace.
Est-ce la raison ?
bde=> create database bde tablespace ts_1;

Hors ligne

#7 11/07/2013 14:35:12

SQLpro
Membre

Re : Déterminer le tablespace d'accueil d'un objet

Dans l'article cité, voici le requête :

SELECT DISTINCT T.oid AS table_space_oid,
spcname AS table_space_name,
CASE spcname
WHEN 'pg_default'
THEN setting || '/base/' || CAST(D.oid
AS VARCHAR(16))
WHEN 'pg_global'
THEN setting || '/global/'
ELSE spclocation
END AS location
FROM pg_tablespace AS T
CROSS JOIN pg_settings AS S
CROSS JOIN pg_database AS D
WHERE S.name = 'data_directory'
AND spcname <> 'pg_global'
AND D.datname = current_database();

A +


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

#8 11/07/2013 18:01:09

gleu
Administrateur

Re : Déterminer le tablespace d'accueil d'un objet

Si la table se trouve dans le même tablespace que la base de données, le tablespace n'est pas affiché.


Guillaume.

Hors ligne

#9 12/07/2013 08:32:11

David
Membre

Re : Déterminer le tablespace d'accueil d'un objet

Bonjour Guillaume.
Ca explique effectivement mon soucis.
Merci à tous.

Hors ligne

Pied de page des forums