PostgreSQL Source Code
git master
Loading...
Searching...
No Matches
pg_stash_advice.h
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* pg_stash_advice.h
4
* main header for pg_stash_advice contrib module
5
*
6
* This module allows plan advice strings (as used and generated by
7
* pg_plan_advice) to be "stashed" in dynamic shared memory and, from
8
* there, automatically be applied to queries as they are planned.
9
* You can create any number of advice stashes, each of which is
10
* identified by a human-readable, ASCII identifier, and each of them is
11
* essentially a query ID -> advice_string mapping.
12
*
13
* Copyright (c) 2016-2026, PostgreSQL Global Development Group
14
*
15
* contrib/pg_stash_advice/pg_stash_advice.h
16
*
17
*-------------------------------------------------------------------------
18
*/
19
#ifndef PG_STASH_ADVICE_H
20
#define PG_STASH_ADVICE_H
21
22
#include "
lib/dshash.h
"
23
#include "
storage/lwlock.h
"
24
25
/*
26
* The key that we use to find a particular stash entry.
27
*/
28
typedef
struct
pgsa_entry_key
29
{
30
uint64
pgsa_stash_id
;
31
int64
queryId
;
32
}
pgsa_entry_key
;
33
34
/*
35
* A single stash entry.
36
*/
37
typedef
struct
pgsa_entry
38
{
39
pgsa_entry_key
key
;
40
dsa_pointer
advice_string
;
41
}
pgsa_entry
;
42
43
/*
44
* The stash itself is just a mapping from a name to a stash ID.
45
*/
46
typedef
struct
pgsa_stash
47
{
48
char
name
[
NAMEDATALEN
];
49
uint64
pgsa_stash_id
;
50
}
pgsa_stash
;
51
52
/*
53
* Top-level shared state object for pg_stash_advice.
54
*/
55
typedef
struct
pgsa_shared_state
56
{
57
LWLock
lock
;
58
int
dsa_tranche
;
59
int
stash_tranche
;
60
int
entry_tranche
;
61
uint64
next_stash_id
;
62
dsa_handle
area
;
63
dshash_table_handle
stash_hash
;
64
dshash_table_handle
entry_hash
;
65
}
pgsa_shared_state
;
66
67
/* For stash ID -> stash name hash table */
68
typedef
struct
pgsa_stash_name
69
{
70
uint32
status
;
71
uint64
pgsa_stash_id
;
72
char
*
name
;
73
}
pgsa_stash_name
;
74
75
/* Declare stash ID -> stash name hash table */
76
#define SH_PREFIX pgsa_stash_name_table
77
#define SH_ELEMENT_TYPE pgsa_stash_name
78
#define SH_KEY_TYPE uint64
79
#define SH_SCOPE extern
80
#define SH_DECLARE
81
#include "
lib/simplehash.h
"
82
83
/* Shared memory pointers */
84
extern
pgsa_shared_state
*
pgsa_state
;
85
extern
dsa_area
*
pgsa_dsa_area
;
86
extern
dshash_table
*
pgsa_stash_dshash
;
87
extern
dshash_table
*
pgsa_entry_dshash
;
88
89
/* Function prototypes */
90
extern
void
pgsa_attach
(
void
);
91
extern
void
pgsa_check_stash_name
(
char
*
stash_name
);
92
extern
void
pgsa_clear_advice_string
(
char
*
stash_name
,
int64
queryId);
93
extern
void
pgsa_create_stash
(
char
*
stash_name
);
94
extern
void
pgsa_drop_stash
(
char
*
stash_name
);
95
extern
uint64
pgsa_lookup_stash_id
(
char
*
stash_name
);
96
extern
void
pgsa_set_advice_string
(
char
*
stash_name
,
int64
queryId,
97
char
*advice_string);
98
99
#endif
int64
int64_t int64
Definition
c.h:621
uint64
uint64_t uint64
Definition
c.h:625
uint32
uint32_t uint32
Definition
c.h:624
dsa_pointer
uint64 dsa_pointer
Definition
dsa.h:62
dsa_handle
dsm_handle dsa_handle
Definition
dsa.h:136
dshash.h
dshash_table_handle
dsa_pointer dshash_table_handle
Definition
dshash.h:24
lwlock.h
NAMEDATALEN
#define NAMEDATALEN
Definition
pg_config_manual.h:39
pgsa_entry_dshash
dshash_table * pgsa_entry_dshash
Definition
pg_stash_advice.c:51
pgsa_stash_dshash
dshash_table * pgsa_stash_dshash
Definition
pg_stash_advice.c:50
pgsa_create_stash
void pgsa_create_stash(char *stash_name)
Definition
pg_stash_advice.c:371
pgsa_drop_stash
void pgsa_drop_stash(char *stash_name)
Definition
pg_stash_advice.c:432
pgsa_set_advice_string
void pgsa_set_advice_string(char *stash_name, int64 queryId, char *advice_string)
Definition
pg_stash_advice.c:535
pgsa_dsa_area
dsa_area * pgsa_dsa_area
Definition
pg_stash_advice.c:49
pgsa_lookup_stash_id
uint64 pgsa_lookup_stash_id(char *stash_name)
Definition
pg_stash_advice.c:516
pgsa_attach
void pgsa_attach(void)
Definition
pg_stash_advice.c:182
pgsa_check_stash_name
void pgsa_check_stash_name(char *stash_name)
Definition
pg_stash_advice.c:288
pgsa_state
pgsa_shared_state * pgsa_state
Definition
pg_stash_advice.c:48
pgsa_clear_advice_string
void pgsa_clear_advice_string(char *stash_name, int64 queryId)
Definition
pg_stash_advice.c:392
fb
static int fb(int x)
Definition
preproc-init.c:92
simplehash.h
LWLock
Definition
lwlock.h:42
dsa_area
Definition
dsa.c:348
dshash_table
Definition
dshash.c:106
pgsa_entry_key
Definition
pg_stash_advice.h:29
pgsa_entry_key::queryId
int64 queryId
Definition
pg_stash_advice.h:31
pgsa_entry_key::pgsa_stash_id
uint64 pgsa_stash_id
Definition
pg_stash_advice.h:30
pgsa_entry
Definition
pg_stash_advice.h:38
pgsa_entry::key
pgsa_entry_key key
Definition
pg_stash_advice.h:39
pgsa_entry::advice_string
dsa_pointer advice_string
Definition
pg_stash_advice.h:40
pgsa_shared_state
Definition
pg_stash_advice.h:56
pgsa_shared_state::entry_hash
dshash_table_handle entry_hash
Definition
pg_stash_advice.h:64
pgsa_shared_state::stash_hash
dshash_table_handle stash_hash
Definition
pg_stash_advice.h:63
pgsa_shared_state::stash_tranche
int stash_tranche
Definition
pg_stash_advice.h:59
pgsa_shared_state::lock
LWLock lock
Definition
pg_stash_advice.h:57
pgsa_shared_state::next_stash_id
uint64 next_stash_id
Definition
pg_stash_advice.h:61
pgsa_shared_state::entry_tranche
int entry_tranche
Definition
pg_stash_advice.h:60
pgsa_shared_state::area
dsa_handle area
Definition
pg_stash_advice.h:62
pgsa_shared_state::dsa_tranche
int dsa_tranche
Definition
pg_stash_advice.h:58
pgsa_stash_name
Definition
pg_stash_advice.h:69
pgsa_stash_name::status
uint32 status
Definition
pg_stash_advice.h:70
pgsa_stash_name::name
char * name
Definition
pg_stash_advice.h:72
pgsa_stash_name::pgsa_stash_id
uint64 pgsa_stash_id
Definition
pg_stash_advice.h:71
pgsa_stash
Definition
pg_stash_advice.h:47
pgsa_stash::name
char name[NAMEDATALEN]
Definition
pg_stash_advice.h:48
pgsa_stash::pgsa_stash_id
uint64 pgsa_stash_id
Definition
pg_stash_advice.h:49
contrib
pg_stash_advice
pg_stash_advice.h
Generated on Mon Apr 6 2026 19:13:09 for PostgreSQL Source Code by
1.9.8