Count updates that move row to a new page.
Add pgstat counter to track row updates that result in the successor version going to a new heap page, leaving behind an original version whose t_ctid points to the new version. The current count is shown by the n_tup_newpage_upd column of each of the pg_stat_*_tables views. The new n_tup_newpage_upd column complements the existing n_tup_hot_upd and n_tup_upd columns. Tables that have high n_tup_newpage_upd values (relative to n_tup_upd) are good candidates for tuning heap fillfactor. Corey Huinker, with small tweaks by me. Author: Corey Huinker <corey.huinker@gmail.com> Reviewed-By: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CADkLM=ded21M9iZ36hHm-vj2rE2d=zcKpUQMds__Xm2pxLfHKA@mail.gmail.com
This commit is contained in:
parent
3b50275b12
commit
ae4fdde135
@ -4789,7 +4789,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
|
|||||||
<structfield>n_tup_ins</structfield> <type>bigint</type>
|
<structfield>n_tup_ins</structfield> <type>bigint</type>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Number of rows inserted
|
Total number of rows inserted
|
||||||
</para></entry>
|
</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
@ -4798,7 +4798,10 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
|
|||||||
<structfield>n_tup_upd</structfield> <type>bigint</type>
|
<structfield>n_tup_upd</structfield> <type>bigint</type>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Number of rows updated (includes <link linkend="storage-hot">HOT updated rows</link>)
|
Total number of rows updated. (This includes row updates
|
||||||
|
counted in <structfield>n_tup_hot_upd</structfield> and
|
||||||
|
<structfield>n_tup_newpage_upd</structfield>, and remaining
|
||||||
|
non-<acronym>HOT</acronym> updates.)
|
||||||
</para></entry>
|
</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
@ -4807,7 +4810,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
|
|||||||
<structfield>n_tup_del</structfield> <type>bigint</type>
|
<structfield>n_tup_del</structfield> <type>bigint</type>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Number of rows deleted
|
Total number of rows deleted
|
||||||
</para></entry>
|
</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
@ -4816,8 +4819,23 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
|
|||||||
<structfield>n_tup_hot_upd</structfield> <type>bigint</type>
|
<structfield>n_tup_hot_upd</structfield> <type>bigint</type>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Number of rows HOT updated (i.e., with no separate index
|
Number of rows <link linkend="storage-hot">HOT updated</link>.
|
||||||
update required)
|
These are updates where no successor versions are required in
|
||||||
|
indexes.
|
||||||
|
</para></entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry role="catalog_table_entry"><para role="column_definition">
|
||||||
|
<structfield>n_tup_newpage_upd</structfield> <type>bigint</type>
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Number of rows updated where the successor version goes onto a
|
||||||
|
<emphasis>new</emphasis> heap page, leaving behind an original
|
||||||
|
version with a
|
||||||
|
<link linkend="storage-tuple-layout"><structfield>t_ctid</structfield>
|
||||||
|
field</link> that points to a different heap page. These are
|
||||||
|
always non-<acronym>HOT</acronym> updates.
|
||||||
</para></entry>
|
</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
|
@ -3803,7 +3803,7 @@ l2:
|
|||||||
if (have_tuple_lock)
|
if (have_tuple_lock)
|
||||||
UnlockTupleTuplock(relation, &(oldtup.t_self), *lockmode);
|
UnlockTupleTuplock(relation, &(oldtup.t_self), *lockmode);
|
||||||
|
|
||||||
pgstat_count_heap_update(relation, use_hot_update);
|
pgstat_count_heap_update(relation, use_hot_update, newbuf != buffer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If heaptup is a private copy, release it. Don't forget to copy t_self
|
* If heaptup is a private copy, release it. Don't forget to copy t_self
|
||||||
|
@ -665,6 +665,7 @@ CREATE VIEW pg_stat_all_tables AS
|
|||||||
pg_stat_get_tuples_updated(C.oid) AS n_tup_upd,
|
pg_stat_get_tuples_updated(C.oid) AS n_tup_upd,
|
||||||
pg_stat_get_tuples_deleted(C.oid) AS n_tup_del,
|
pg_stat_get_tuples_deleted(C.oid) AS n_tup_del,
|
||||||
pg_stat_get_tuples_hot_updated(C.oid) AS n_tup_hot_upd,
|
pg_stat_get_tuples_hot_updated(C.oid) AS n_tup_hot_upd,
|
||||||
|
pg_stat_get_tuples_newpage_updated(C.oid) AS n_tup_newpage_upd,
|
||||||
pg_stat_get_live_tuples(C.oid) AS n_live_tup,
|
pg_stat_get_live_tuples(C.oid) AS n_live_tup,
|
||||||
pg_stat_get_dead_tuples(C.oid) AS n_dead_tup,
|
pg_stat_get_dead_tuples(C.oid) AS n_dead_tup,
|
||||||
pg_stat_get_mod_since_analyze(C.oid) AS n_mod_since_analyze,
|
pg_stat_get_mod_since_analyze(C.oid) AS n_mod_since_analyze,
|
||||||
@ -696,7 +697,8 @@ CREATE VIEW pg_stat_xact_all_tables AS
|
|||||||
pg_stat_get_xact_tuples_inserted(C.oid) AS n_tup_ins,
|
pg_stat_get_xact_tuples_inserted(C.oid) AS n_tup_ins,
|
||||||
pg_stat_get_xact_tuples_updated(C.oid) AS n_tup_upd,
|
pg_stat_get_xact_tuples_updated(C.oid) AS n_tup_upd,
|
||||||
pg_stat_get_xact_tuples_deleted(C.oid) AS n_tup_del,
|
pg_stat_get_xact_tuples_deleted(C.oid) AS n_tup_del,
|
||||||
pg_stat_get_xact_tuples_hot_updated(C.oid) AS n_tup_hot_upd
|
pg_stat_get_xact_tuples_hot_updated(C.oid) AS n_tup_hot_upd,
|
||||||
|
pg_stat_get_xact_tuples_newpage_updated(C.oid) AS n_tup_newpage_upd
|
||||||
FROM pg_class C LEFT JOIN
|
FROM pg_class C LEFT JOIN
|
||||||
pg_index I ON C.oid = I.indrelid
|
pg_index I ON C.oid = I.indrelid
|
||||||
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
||||||
|
@ -373,8 +373,10 @@ pgstat_count_heap_insert(Relation rel, PgStat_Counter n)
|
|||||||
* count a tuple update
|
* count a tuple update
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
pgstat_count_heap_update(Relation rel, bool hot)
|
pgstat_count_heap_update(Relation rel, bool hot, bool newpage)
|
||||||
{
|
{
|
||||||
|
Assert(!(hot && newpage));
|
||||||
|
|
||||||
if (pgstat_should_count_relation(rel))
|
if (pgstat_should_count_relation(rel))
|
||||||
{
|
{
|
||||||
PgStat_TableStatus *pgstat_info = rel->pgstat_info;
|
PgStat_TableStatus *pgstat_info = rel->pgstat_info;
|
||||||
@ -382,9 +384,14 @@ pgstat_count_heap_update(Relation rel, bool hot)
|
|||||||
ensure_tabstat_xact_level(pgstat_info);
|
ensure_tabstat_xact_level(pgstat_info);
|
||||||
pgstat_info->trans->tuples_updated++;
|
pgstat_info->trans->tuples_updated++;
|
||||||
|
|
||||||
/* t_tuples_hot_updated is nontransactional, so just advance it */
|
/*
|
||||||
|
* t_tuples_hot_updated and t_tuples_newpage_updated counters are
|
||||||
|
* nontransactional, so just advance them
|
||||||
|
*/
|
||||||
if (hot)
|
if (hot)
|
||||||
pgstat_info->t_counts.t_tuples_hot_updated++;
|
pgstat_info->t_counts.t_tuples_hot_updated++;
|
||||||
|
else if (newpage)
|
||||||
|
pgstat_info->t_counts.t_tuples_newpage_updated++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -804,6 +811,7 @@ pgstat_relation_flush_cb(PgStat_EntryRef *entry_ref, bool nowait)
|
|||||||
tabentry->tuples_updated += lstats->t_counts.t_tuples_updated;
|
tabentry->tuples_updated += lstats->t_counts.t_tuples_updated;
|
||||||
tabentry->tuples_deleted += lstats->t_counts.t_tuples_deleted;
|
tabentry->tuples_deleted += lstats->t_counts.t_tuples_deleted;
|
||||||
tabentry->tuples_hot_updated += lstats->t_counts.t_tuples_hot_updated;
|
tabentry->tuples_hot_updated += lstats->t_counts.t_tuples_hot_updated;
|
||||||
|
tabentry->tuples_newpage_updated += lstats->t_counts.t_tuples_newpage_updated;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If table was truncated/dropped, first reset the live/dead counters.
|
* If table was truncated/dropped, first reset the live/dead counters.
|
||||||
|
@ -92,6 +92,9 @@ PG_STAT_GET_RELENTRY_INT64(tuples_fetched)
|
|||||||
/* pg_stat_get_tuples_hot_updated */
|
/* pg_stat_get_tuples_hot_updated */
|
||||||
PG_STAT_GET_RELENTRY_INT64(tuples_hot_updated)
|
PG_STAT_GET_RELENTRY_INT64(tuples_hot_updated)
|
||||||
|
|
||||||
|
/* pg_stat_get_tuples_newpage_updated */
|
||||||
|
PG_STAT_GET_RELENTRY_INT64(tuples_newpage_updated)
|
||||||
|
|
||||||
/* pg_stat_get_tuples_inserted */
|
/* pg_stat_get_tuples_inserted */
|
||||||
PG_STAT_GET_RELENTRY_INT64(tuples_inserted)
|
PG_STAT_GET_RELENTRY_INT64(tuples_inserted)
|
||||||
|
|
||||||
@ -1618,6 +1621,21 @@ pg_stat_get_xact_tuples_hot_updated(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_INT64(result);
|
PG_RETURN_INT64(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Datum
|
||||||
|
pg_stat_get_xact_tuples_newpage_updated(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
Oid relid = PG_GETARG_OID(0);
|
||||||
|
int64 result;
|
||||||
|
PgStat_TableStatus *tabentry;
|
||||||
|
|
||||||
|
if ((tabentry = find_tabstat_entry(relid)) == NULL)
|
||||||
|
result = 0;
|
||||||
|
else
|
||||||
|
result = (int64) (tabentry->t_counts.t_tuples_newpage_updated);
|
||||||
|
|
||||||
|
PG_RETURN_INT64(result);
|
||||||
|
}
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
pg_stat_get_xact_blocks_fetched(PG_FUNCTION_ARGS)
|
pg_stat_get_xact_blocks_fetched(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
|
@ -57,6 +57,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 202303181
|
#define CATALOG_VERSION_NO 202303231
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -5360,6 +5360,11 @@
|
|||||||
proname => 'pg_stat_get_tuples_hot_updated', provolatile => 's',
|
proname => 'pg_stat_get_tuples_hot_updated', provolatile => 's',
|
||||||
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
||||||
prosrc => 'pg_stat_get_tuples_hot_updated' },
|
prosrc => 'pg_stat_get_tuples_hot_updated' },
|
||||||
|
{ oid => '8614',
|
||||||
|
descr => 'statistics: number of tuples updated onto a new page',
|
||||||
|
proname => 'pg_stat_get_tuples_newpage_updated', provolatile => 's',
|
||||||
|
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
||||||
|
prosrc => 'pg_stat_get_tuples_newpage_updated' },
|
||||||
{ oid => '2878', descr => 'statistics: number of live tuples',
|
{ oid => '2878', descr => 'statistics: number of live tuples',
|
||||||
proname => 'pg_stat_get_live_tuples', provolatile => 's', proparallel => 'r',
|
proname => 'pg_stat_get_live_tuples', provolatile => 's', proparallel => 'r',
|
||||||
prorettype => 'int8', proargtypes => 'oid',
|
prorettype => 'int8', proargtypes => 'oid',
|
||||||
@ -5823,6 +5828,11 @@
|
|||||||
proname => 'pg_stat_get_xact_tuples_hot_updated', provolatile => 'v',
|
proname => 'pg_stat_get_xact_tuples_hot_updated', provolatile => 'v',
|
||||||
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
||||||
prosrc => 'pg_stat_get_xact_tuples_hot_updated' },
|
prosrc => 'pg_stat_get_xact_tuples_hot_updated' },
|
||||||
|
{ oid => '8615',
|
||||||
|
descr => 'statistics: number of tuples updated onto a new page in current transaction',
|
||||||
|
proname => 'pg_stat_get_xact_tuples_newpage_updated', provolatile => 'v',
|
||||||
|
proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
|
||||||
|
prosrc => 'pg_stat_get_xact_tuples_newpage_updated' },
|
||||||
{ oid => '3044',
|
{ oid => '3044',
|
||||||
descr => 'statistics: number of blocks fetched in current transaction',
|
descr => 'statistics: number of blocks fetched in current transaction',
|
||||||
proname => 'pg_stat_get_xact_blocks_fetched', provolatile => 'v',
|
proname => 'pg_stat_get_xact_blocks_fetched', provolatile => 'v',
|
||||||
|
@ -151,8 +151,8 @@ typedef struct PgStat_BackendSubEntry
|
|||||||
* the index AM, while tuples_fetched is the number of tuples successfully
|
* the index AM, while tuples_fetched is the number of tuples successfully
|
||||||
* fetched by heap_fetch under the control of simple indexscans for this index.
|
* fetched by heap_fetch under the control of simple indexscans for this index.
|
||||||
*
|
*
|
||||||
* tuples_inserted/updated/deleted/hot_updated count attempted actions,
|
* tuples_inserted/updated/deleted/hot_updated/newpage_updated count attempted
|
||||||
* regardless of whether the transaction committed. delta_live_tuples,
|
* actions, regardless of whether the transaction committed. delta_live_tuples,
|
||||||
* delta_dead_tuples, and changed_tuples are set depending on commit or abort.
|
* delta_dead_tuples, and changed_tuples are set depending on commit or abort.
|
||||||
* Note that delta_live_tuples and delta_dead_tuples can be negative!
|
* Note that delta_live_tuples and delta_dead_tuples can be negative!
|
||||||
* ----------
|
* ----------
|
||||||
@ -168,6 +168,7 @@ typedef struct PgStat_TableCounts
|
|||||||
PgStat_Counter t_tuples_updated;
|
PgStat_Counter t_tuples_updated;
|
||||||
PgStat_Counter t_tuples_deleted;
|
PgStat_Counter t_tuples_deleted;
|
||||||
PgStat_Counter t_tuples_hot_updated;
|
PgStat_Counter t_tuples_hot_updated;
|
||||||
|
PgStat_Counter t_tuples_newpage_updated;
|
||||||
bool t_truncdropped;
|
bool t_truncdropped;
|
||||||
|
|
||||||
PgStat_Counter t_delta_live_tuples;
|
PgStat_Counter t_delta_live_tuples;
|
||||||
@ -401,6 +402,7 @@ typedef struct PgStat_StatTabEntry
|
|||||||
PgStat_Counter tuples_updated;
|
PgStat_Counter tuples_updated;
|
||||||
PgStat_Counter tuples_deleted;
|
PgStat_Counter tuples_deleted;
|
||||||
PgStat_Counter tuples_hot_updated;
|
PgStat_Counter tuples_hot_updated;
|
||||||
|
PgStat_Counter tuples_newpage_updated;
|
||||||
|
|
||||||
PgStat_Counter live_tuples;
|
PgStat_Counter live_tuples;
|
||||||
PgStat_Counter dead_tuples;
|
PgStat_Counter dead_tuples;
|
||||||
@ -616,7 +618,7 @@ extern void pgstat_report_analyze(Relation rel,
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
extern void pgstat_count_heap_insert(Relation rel, PgStat_Counter n);
|
extern void pgstat_count_heap_insert(Relation rel, PgStat_Counter n);
|
||||||
extern void pgstat_count_heap_update(Relation rel, bool hot);
|
extern void pgstat_count_heap_update(Relation rel, bool hot, bool newpage);
|
||||||
extern void pgstat_count_heap_delete(Relation rel);
|
extern void pgstat_count_heap_delete(Relation rel);
|
||||||
extern void pgstat_count_truncate(Relation rel);
|
extern void pgstat_count_truncate(Relation rel);
|
||||||
extern void pgstat_update_heap_dead_tuples(Relation rel, int delta);
|
extern void pgstat_update_heap_dead_tuples(Relation rel, int delta);
|
||||||
|
@ -1789,6 +1789,7 @@ pg_stat_all_tables| SELECT c.oid AS relid,
|
|||||||
pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,
|
pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,
|
||||||
pg_stat_get_tuples_deleted(c.oid) AS n_tup_del,
|
pg_stat_get_tuples_deleted(c.oid) AS n_tup_del,
|
||||||
pg_stat_get_tuples_hot_updated(c.oid) AS n_tup_hot_upd,
|
pg_stat_get_tuples_hot_updated(c.oid) AS n_tup_hot_upd,
|
||||||
|
pg_stat_get_tuples_newpage_updated(c.oid) AS n_tup_newpage_upd,
|
||||||
pg_stat_get_live_tuples(c.oid) AS n_live_tup,
|
pg_stat_get_live_tuples(c.oid) AS n_live_tup,
|
||||||
pg_stat_get_dead_tuples(c.oid) AS n_dead_tup,
|
pg_stat_get_dead_tuples(c.oid) AS n_dead_tup,
|
||||||
pg_stat_get_mod_since_analyze(c.oid) AS n_mod_since_analyze,
|
pg_stat_get_mod_since_analyze(c.oid) AS n_mod_since_analyze,
|
||||||
@ -2146,6 +2147,7 @@ pg_stat_sys_tables| SELECT relid,
|
|||||||
n_tup_upd,
|
n_tup_upd,
|
||||||
n_tup_del,
|
n_tup_del,
|
||||||
n_tup_hot_upd,
|
n_tup_hot_upd,
|
||||||
|
n_tup_newpage_upd,
|
||||||
n_live_tup,
|
n_live_tup,
|
||||||
n_dead_tup,
|
n_dead_tup,
|
||||||
n_mod_since_analyze,
|
n_mod_since_analyze,
|
||||||
@ -2193,6 +2195,7 @@ pg_stat_user_tables| SELECT relid,
|
|||||||
n_tup_upd,
|
n_tup_upd,
|
||||||
n_tup_del,
|
n_tup_del,
|
||||||
n_tup_hot_upd,
|
n_tup_hot_upd,
|
||||||
|
n_tup_newpage_upd,
|
||||||
n_live_tup,
|
n_live_tup,
|
||||||
n_dead_tup,
|
n_dead_tup,
|
||||||
n_mod_since_analyze,
|
n_mod_since_analyze,
|
||||||
@ -2244,7 +2247,8 @@ pg_stat_xact_all_tables| SELECT c.oid AS relid,
|
|||||||
pg_stat_get_xact_tuples_inserted(c.oid) AS n_tup_ins,
|
pg_stat_get_xact_tuples_inserted(c.oid) AS n_tup_ins,
|
||||||
pg_stat_get_xact_tuples_updated(c.oid) AS n_tup_upd,
|
pg_stat_get_xact_tuples_updated(c.oid) AS n_tup_upd,
|
||||||
pg_stat_get_xact_tuples_deleted(c.oid) AS n_tup_del,
|
pg_stat_get_xact_tuples_deleted(c.oid) AS n_tup_del,
|
||||||
pg_stat_get_xact_tuples_hot_updated(c.oid) AS n_tup_hot_upd
|
pg_stat_get_xact_tuples_hot_updated(c.oid) AS n_tup_hot_upd,
|
||||||
|
pg_stat_get_xact_tuples_newpage_updated(c.oid) AS n_tup_newpage_upd
|
||||||
FROM ((pg_class c
|
FROM ((pg_class c
|
||||||
LEFT JOIN pg_index i ON ((c.oid = i.indrelid)))
|
LEFT JOIN pg_index i ON ((c.oid = i.indrelid)))
|
||||||
LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
|
LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
|
||||||
@ -2260,7 +2264,8 @@ pg_stat_xact_sys_tables| SELECT relid,
|
|||||||
n_tup_ins,
|
n_tup_ins,
|
||||||
n_tup_upd,
|
n_tup_upd,
|
||||||
n_tup_del,
|
n_tup_del,
|
||||||
n_tup_hot_upd
|
n_tup_hot_upd,
|
||||||
|
n_tup_newpage_upd
|
||||||
FROM pg_stat_xact_all_tables
|
FROM pg_stat_xact_all_tables
|
||||||
WHERE ((schemaname = ANY (ARRAY['pg_catalog'::name, 'information_schema'::name])) OR (schemaname ~ '^pg_toast'::text));
|
WHERE ((schemaname = ANY (ARRAY['pg_catalog'::name, 'information_schema'::name])) OR (schemaname ~ '^pg_toast'::text));
|
||||||
pg_stat_xact_user_functions| SELECT p.oid AS funcid,
|
pg_stat_xact_user_functions| SELECT p.oid AS funcid,
|
||||||
@ -2282,7 +2287,8 @@ pg_stat_xact_user_tables| SELECT relid,
|
|||||||
n_tup_ins,
|
n_tup_ins,
|
||||||
n_tup_upd,
|
n_tup_upd,
|
||||||
n_tup_del,
|
n_tup_del,
|
||||||
n_tup_hot_upd
|
n_tup_hot_upd,
|
||||||
|
n_tup_newpage_upd
|
||||||
FROM pg_stat_xact_all_tables
|
FROM pg_stat_xact_all_tables
|
||||||
WHERE ((schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND (schemaname !~ '^pg_toast'::text));
|
WHERE ((schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND (schemaname !~ '^pg_toast'::text));
|
||||||
pg_statio_all_indexes| SELECT c.oid AS relid,
|
pg_statio_all_indexes| SELECT c.oid AS relid,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user