Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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.
Julien.
https://rjuju.github.io/
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 »
Julien.
https://rjuju.github.io/
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
Pages : 1