Re: Hardware/OS recommendations for large databases (
От | Mark Kirkwood |
---|---|
Тема | Re: Hardware/OS recommendations for large databases ( |
Дата | |
Msg-id | 438550CB.5020506@paradise.net.nz обсуждение исходный текст |
Ответ на | Re: Hardware/OS recommendations for large databases ( ("Luke Lonergan" <llonergan@greenplum.com>) |
Список | pgsql-performance |
Luke Lonergan wrote: > Mark, > > This is an excellent idea – unfortunately I’m in Maui right now > (Mahalo!) and I’m not getting to testing with this. My first try was > with 8.0.3 and it’s an 8.1 function I presume. > > Not to be lazy – but any hint as to how to do the same thing for 8.0? > Yeah, it's 8.1 - I didn't think to check against 8.0. The attached variant works with 8.0.4 (textToQualifiedNameList needs 2 args) cheers Mark P.s. Maui eh, sounds real nice. /* * fastcount.c * * Do a count that uses considerably less CPU time than an aggregate. * * (Variant for 8.0.x - textToQualifiedNameList needs 2 args) */ #include "postgres.h" #include "funcapi.h" #include "access/heapam.h" #include "catalog/namespace.h" #include "utils/builtins.h" extern Datum fastcount(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(fastcount); Datum fastcount(PG_FUNCTION_ARGS) { text *relname = PG_GETARG_TEXT_P(0); RangeVar *relrv; Relation rel; HeapScanDesc scan; HeapTuple tuple; int64 result = 0; /* Use the name to get a suitable range variable and open the relation. */ relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname, "")); rel = heap_openrv(relrv, AccessShareLock); /* Start a heap scan on the relation. */ scan = heap_beginscan(rel, SnapshotNow, 0, NULL); while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { result++; } /* End the scan and close up the relation. */ heap_endscan(scan); heap_close(rel, AccessShareLock); PG_RETURN_INT64(result); }
В списке pgsql-performance по дате отправления: