Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
Ah, tiens, oui, tu as raison gleu, c'est pas un Postgres «standard»
Marc.
Hors ligne
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
OK. Leur partitionnement doit fonctionner autrement. À voir avec eux
Marc.
Hors ligne
Pages : 1