Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 21/08/2015 14:48:15
- postgresfan
- Membre
Requete table partionnée
Bonjour,
j'ai une table partionnée avec 12 partitions:
Comment puis je obtenir le nombre de lignes de chaque partition?
Code:
CREATE TABLE mkt.t_fac_member_mails
(
ibroadlogid integer NOT NULL,
ideliveryid integer NOT NULL,
memberid integer NOT NULL,
siteid integer NOT NULL,
mail_id_quot integer NOT NULL,
istatus smallint NOT NULL,
histoloadid integer NOT NULL
)
WITH (
OIDS=FALSE
)
DISTRIBUTED BY (ibroadlogid, ideliveryid, memberid, mail_id_quot)
PARTITION BY RANGE(mail_id_quot)
(
START (20120301) END (20120331) INCLUSIVE WITH (appendonly=false),
START (20120401) END (20120430) INCLUSIVE WITH (appendonly=false),
START (20120501) END (20120531) INCLUSIVE WITH (appendonly=false),
START (20120601) END (20120630) INCLUSIVE WITH (appendonly=false),
START (20120701) END (20120731) INCLUSIVE WITH (appendonly=false),
START (20120801) END (20120831) INCLUSIVE WITH (appendonly=false),
START (20120901) END (20120930) INCLUSIVE WITH (appendonly=false),
START (20121001) END (20121031) INCLUSIVE WITH (appendonly=false),
START (20121101) END (20121130) INCLUSIVE WITH (appendonly=false),
START (20121201) END (20121231) INCLUSIVE WITH (appendonly=false),
DEFAULT PARTITION other WITH (appendonly=false)
)
;
ALTER TABLE mkt.t_fac_member_mails OWNER TO group_owner_prod;
GRANT ALL ON TABLE mkt.t_fac_member_mails TO group_owner_prod;
GRANT SELECT ON TABLE mkt.t_fac_member_mails TO g_pr_mkt_r;
et une partition:
CREATE TABLE mkt.t_fac_member_mails_1_prt_1
OF
(
CONSTRAINT t_fac_member_mails_1_prt_1_check CHECK (mail_id_quot >= 20120301 AND mail_id_quot <= 20120331)
)
INHERITS (mkt.t_fac_member_mails)
WITH (APPENDONLY=false,
OIDS=FALSE
)
DISTRIBUTED BY (ibroadlogid, ideliveryid, memberid, mail_id_quot);
ALTER PARTITION mkt.t_fac_member_mails_1_prt_1 OWNER TO group_owner_prod;
GRANT ALL ON PARTITION mkt.t_fac_member_mails_1_prt_1 TO group_owner_prod;
GRANT SELECT ON PARTITION mkt.t_fac_member_mails_1_prt_1 TO g_pr_mkt_r;
---------
merci
Hors ligne
#2 21/08/2015 15:26:57
- Marc Cousin
- Membre
Re : Requete table partionnée
Il y a plusieurs solutions: faire des SELECT ONLY sur chacune des partitions (mais j'imagine que ce n'est pas la façon demandée).
Sinon, il y a un champ caché «tableoid» qu'on peut interroger quand on fait un select. Il retourne l'oid de la table dans pg_class. C'est une fonctionnalité à peu près inutile, sauf dans le cas du partitionnement:
SELECT tableoid::regclass,count(*) from ma_table_partitionnee group by tableoid::regclass
devrait le faire
::regclass, c'est un petit raccourci, où on cast l'oid en élément de pg_class directement. Ça permet de retourner le nom de la table (préfixée de son schéma si il y a ambiguïté)
Marc.
Hors ligne
#3 21/08/2015 15:39:10
- gleu
- Administrateur
Re : Requete table partionnée
Ce n'est pas une requête acceptée par PostgreSQL, donc je n'en ai aucune idée. Je suppose que vous utilisez PostgreSQL Plus Advanced Server. Le mieux dans ce cas est d'utiliser leur équipe de support ou leur forums.
Guillaume.
Hors ligne
#4 21/08/2015 15:40:14
- Marc Cousin
- Membre
Re : Requete table partionnée
Ah, tiens, oui, tu as raison gleu, c'est pas un Postgres «standard»
Marc.
Hors ligne
#5 24/08/2015 11:16:11
- postgresfan
- Membre
Re : Requete table partionnée
oui c est du Greenplum
bien vu
PS:
SELECT tableoid::regclass,count(*) from mkt.t_fac_member_mails_1_prt_3 group by tableoid::regclass
ca renvoit rien
Hors ligne
#6 24/08/2015 11:27:07
- Marc Cousin
- Membre
Re : Requete table partionnée
OK. Leur partitionnement doit fonctionner autrement. À voir avec eux
Marc.
Hors ligne
Pages : 1