De instelling voor het statistiekdoel wordt per kolom opgeslagen in de catalogustabel pg_attribute
. Je kunt het als volgt instellen:
ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;
En controleer het als volgt:
SELECT attstattarget
FROM pg_attribute
WHERE attrelid = 'myschama.mytable'::regclass
AND attname = 'mycolumn';
Of je kijkt gewoon naar het aanmaakscript in de objectbrowser van pgAdmin, waar het wordt toegevoegd als de waarde verschilt van de standaardwaarde in default_statistics_target
.
Ik citeer de handleiding op attstattarget
:
attstattarget bepaalt het detailniveau van de statistieken die voor deze kolom zijn verzameld door ANALYZE
. Een nulwaarde geeft aan dat er geen statistieken moeten worden verzameld. Een negatieve waarde zegt dat het doel van de standaardstatistieken van het systeem moet worden gebruikt. De exacte betekenis van positieve waarden is afhankelijk van het gegevenstype. Voor scalaire gegevenstypen is attstattarget zowel het doelaantal "meest voorkomende waarden" dat moet worden verzameld als het doelaantal histogrambakken dat moet worden gemaakt.
Vet benadruk de mijne.
Statistieken voor gewone indexkolommen zijn identiek aan kolomstatistieken en hebben geen afzonderlijke vermeldingen in statistiekentabellen. Maar Postgres verzamelt afzonderlijke statistieken voor index expressies . Die kunnen op een vergelijkbare manier worden aangepast:
ALTER INDEX myschema.myidx ALTER COLUMN 1 SET STATISTICS 128;
Als er geen echte kolomnamen zijn, worden rangtelwoorden gebruikt om indexkolommen aan te spreken, die overeenkomen met pg_attribute.attnum
:
SELECT attstattarget
FROM pg_attribute
WHERE attrelid = 'myschama.myidx'::regclass
AND attnum = 1;
De instelling heeft alleen daadwerkelijk invloed op kolomstatistieken de volgende keer ANALYZE
wordt handmatig uitgevoerd of door autovacuum
.