Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9b56cc3

Browse files
author
Nikita Malakhov
committed
Toaster API documentation package: SQL syntax (CREATE TABLE, ALTER TABLE, CREATE TOASTER) + Toaster API short explanation
0006_toasterapi_docs patch
1 parentf737ba6 commit9b56cc3

File tree

6 files changed

+275
-2
lines changed

6 files changed

+275
-2
lines changed

‎doc/src/sgml/catalogs.sgml‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8132,6 +8132,71 @@ SCRAM-SHA-256$<replaceable>&lt;iteration count&gt;</replaceable>:<replaceable>&l
81328132
</sect1>
81338133

81348134

8135+
<sect1 id="catalog-pg-toaster">
8136+
<title><structname>pg_toaster</structname></title>
8137+
8138+
<indexterm zone="catalog-pg-toaster">
8139+
<primary>pg_toaster</primary>
8140+
</indexterm>
8141+
8142+
<para>
8143+
The catalog <structname>pg_toaster</structname> stores information
8144+
about all available toaster. There are 2 toasters already provided
8145+
with database: default (deftoaster) and sample (dummy_toaster).
8146+
</para>
8147+
8148+
<para>
8149+
Every toaster registered in database is stored in <structname>pg_toaster</structname>.
8150+
This table contains toaster OID, toaster name and related handler procedire.
8151+
</para>
8152+
8153+
<table>
8154+
<title><structname>pg_toaster</structname> Columns</title>
8155+
<tgroup cols="1">
8156+
<thead>
8157+
<row>
8158+
<entry role="catalog_table_entry"><para role="column_definition">
8159+
Column Type
8160+
</para>
8161+
<para>
8162+
Description
8163+
</para></entry>
8164+
</row>
8165+
</thead>
8166+
8167+
<tbody>
8168+
<row>
8169+
<entry role="catalog_table_entry"><para role="column_definition">
8170+
<structfield>oid</structfield> <type>oid</type>
8171+
</para>
8172+
<para>
8173+
Toaster identifier
8174+
</para></entry>
8175+
</row>
8176+
8177+
<row>
8178+
<entry role="catalog_table_entry"><para role="column_definition">
8179+
<structfield>namedata</structfield> <type>toaster_name</type>
8180+
</para>
8181+
<para>
8182+
Toaster name
8183+
</para></entry>
8184+
</row>
8185+
8186+
<row>
8187+
<entry role="catalog_table_entry"><para role="column_definition">
8188+
<structfield>regproc</structfield> <type>Tsr handler</type>
8189+
</para>
8190+
<para>
8191+
Toast API handler procedure
8192+
</para></entry>
8193+
</row>
8194+
</tbody>
8195+
</tgroup>
8196+
</table>
8197+
</sect1>
8198+
8199+
81358200
<sect1 id="catalog-pg-transform">
81368201
<title><structname>pg_transform</structname></title>
81378202

‎doc/src/sgml/ref/allfiles.sgml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ Complete list of usable sgml source files in this directory.
9090
<!ENTITY createTable SYSTEM "create_table.sgml">
9191
<!ENTITY createTableAs SYSTEM "create_table_as.sgml">
9292
<!ENTITY createTableSpace SYSTEM "create_tablespace.sgml">
93+
<!ENTITY createToaster SYSTEM "create_toaster.sgml">
9394
<!ENTITY createTransform SYSTEM "create_transform.sgml">
9495
<!ENTITY createTrigger SYSTEM "create_trigger.sgml">
9596
<!ENTITY createTSConfig SYSTEM "create_tsconfig.sgml">

‎doc/src/sgml/ref/create_table.sgml‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ PostgreSQL documentation
2222
<refsynopsisdiv>
2323
<synopsis>
2424
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] <replaceable class="parameter">table_name</replaceable> ( [
25-
{ <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">data_type</replaceable> [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ] [ COMPRESSION <replaceable>compression_method</replaceable> ] [ COLLATE <replaceable>collation</replaceable> ] [ <replaceable class="parameter">column_constraint</replaceable> [ ... ] ]
25+
{ <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">data_type</replaceable> [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ] [TOASTER <replaceable>compression_method</replaceable> ] [COMPRESSION <replaceable>compression_method</replaceable> ] [ COLLATE <replaceable>collation</replaceable> ] [ <replaceable class="parameter">column_constraint</replaceable> [ ... ] ]
2626
| <replaceable>table_constraint</replaceable>
2727
| LIKE <replaceable>source_table</replaceable> [ <replaceable>like_option</replaceable> ... ] }
2828
[, ... ]
@@ -324,6 +324,18 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
324324
</listitem>
325325
</varlistentry>
326326

327+
<varlistentry>
328+
<term> <literal>SET TOASTER <replaceable class="parameter">toaster_name</replaceable></literal></term>
329+
<listitem>
330+
<para>
331+
This form sets the toaster function for toastable column. This function
332+
must implement how toastable data is stored, and fetched. Also, toast
333+
function could compress data and use different access methods.
334+
See <xref linkend="storage-toast"/> for more information.
335+
</para>
336+
</listitem>
337+
</varlistentry>
338+
327339
<varlistentry>
328340
<term><literal>COMPRESSION <replaceable class="parameter">compression_method</replaceable></literal></term>
329341
<listitem>

‎doc/src/sgml/ref/create_table_as.sgml‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ PostgreSQL documentation
2222
<refsynopsisdiv>
2323
<synopsis>
2424
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] <replaceable>table_name</replaceable>
25-
[ (<replaceable>column_name</replaceable> [, ...] ) ]
25+
[ (<replaceable>column_name</replaceable> [ STORAGE external TOASTER <replaceable>toaster_name</replaceable> ] [, ...] ) ]
2626
[ USING <replaceable class="parameter">method</replaceable> ]
2727
[ WITH ( <replaceable class="parameter">storage_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] ) | WITHOUT OIDS ]
2828
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
@@ -122,6 +122,8 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
122122
<para>
123123
The name of a column in the new table. If column names are not
124124
provided, they are taken from the output column names of the query.
125+
Toaster could be assigned to toastable column with expression
126+
<literal>STORAGE external TOASTER <replaceable>toaster_name</replaceable></literal>
125127
</para>
126128
</listitem>
127129
</varlistentry>
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<!--
2+
doc/src/sgml/ref/create_toaster.sgml
3+
PostgreSQL documentation
4+
-->
5+
6+
<refentry id="sql-createtoaster">
7+
<indexterm zone="sql-createtoaster">
8+
<primary>CREATE TOASTER</primary>
9+
</indexterm>
10+
11+
<refmeta>
12+
<refentrytitle>CREATE TOASTER</refentrytitle>
13+
<manvolnum>7</manvolnum>
14+
<refmiscinfo>SQL - Language Statements</refmiscinfo>
15+
</refmeta>
16+
17+
<refnamediv>
18+
<refname>CREATE TOASTER</refname>
19+
<refpurpose>define a new toaster</refpurpose>
20+
</refnamediv>
21+
22+
<refsynopsisdiv>
23+
<synopsis>
24+
CREATE TOASTER [ IF NOT EXISTS ] <replaceable class="parameter">toaster_name</replaceable> HANDLER <replaceable class="parameter">handler_name</replaceable>
25+
26+
</synopsis>
27+
28+
</refsynopsisdiv>
29+
30+
<refsect1 id="sql-createtoaster-description">
31+
<title>Description</title>
32+
33+
<para>
34+
<command>CREATE TOASTER</command> will attach already defined handler <replaceable class="parameter">handler_name</replaceable>
35+
function to a toaster with name <replaceable class="parameter">toaster_name</replaceable>
36+
in the current database. This function will be used for toasting and de-toasting
37+
values in toasted columns for tables where this toaster is set in <literal>CREATE TABLE
38+
...TOASTER <replaceable class="parameter">toaster_name</replaceable>...</literal> or
39+
<literal>ALTER TABLE ALTER COLUMN ... SET TOASTER <replaceable class="parameter">toaster_name</replaceable>...</literal>
40+
command. New OID is assigned to a <replaceable class="parameter">toaster_name</replaceable> automatically.
41+
</para>
42+
43+
<para>
44+
To be able to create a table, you must have <literal>USAGE</literal>
45+
privilege on all column types or the type in the <literal>OF</literal>
46+
clause, respectively.
47+
</para>
48+
</refsect1>
49+
50+
<refsect1>
51+
<title>Parameters</title>
52+
53+
<variablelist>
54+
55+
<varlistentry>
56+
<term><literal>IF NOT EXISTS</literal></term>
57+
<listitem>
58+
<para>
59+
Do not throw an error if a toaster with the same name already exists.
60+
A notice is issued in this case. Note that there is no guarantee that
61+
the existing toaster is anything like the one that would have been
62+
created.
63+
</para>
64+
</listitem>
65+
</varlistentry>
66+
67+
<varlistentry>
68+
<term><replaceable class="parameter">toaster_name</replaceable></term>
69+
<listitem>
70+
<para>
71+
The name of the toaster table to be created.
72+
</para>
73+
</listitem>
74+
</varlistentry>
75+
76+
<varlistentry>
77+
<term><replaceable class="parameter">handler_name</replaceable></term>
78+
<listitem>
79+
<para>
80+
The name of toast functions handler procedure. Must be reigstered before
81+
using with <literal>CREATE FUNCTION</literal> command, example:
82+
CREATE FUNCTION dummy_toaster_handler(internal)
83+
RETURNS toaster_handler
84+
AS 'MODULE_PATHNAME'
85+
LANGUAGE C;
86+
</para>
87+
</listitem>
88+
</varlistentry>
89+
</variablelist>
90+
91+
92+
<refsect1 id="sql-createtoaster-examples">
93+
<title>Examples</title>
94+
95+
<para>
96+
Create toaster <structname>dummy_toaster</structname> with handler
97+
<structname>dummy_toaster_handler</structname>:
98+
99+
<programlisting>
100+
CREATE FUNCTION dummy_toaster_handler(internal)
101+
RETURNS toaster_handler
102+
AS 'MODULE_PATHNAME'
103+
LANGUAGE C;
104+
105+
106+
CREATE TOASTER dummy_toaster HANDLER dummy_toaster_handler;
107+
108+
COMMENT ON TOASTER dummy_toaster IS 'dummy_toaster is a dummy toaster';
109+
</programlisting>
110+
</para>
111+
</refsect1>
112+
113+
<refsect1 id="sql-createtable-compatibility" xreflabel="Compatibility">
114+
<title>Compatibility</title>
115+
116+
<para>
117+
The <command>CREATE TABLE</command> command does not conform to the
118+
<acronym>SQL</acronym>.
119+
</para>
120+
</refsect1>
121+
122+
<refsect1>
123+
<title>See Also</title>
124+
125+
<simplelist type="inline">
126+
<member><xref linkend="sql-storage"/></member>
127+
<member><xref linkend="sql-createtable"/></member>
128+
<member><xref linkend="sql-createtableas"/></member>
129+
<member><xref linkend="sql-altertable"/></member>
130+
</simplelist>
131+
</refsect1>
132+
</refentry>

‎doc/src/sgml/storage.sgml‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,67 @@ tuple would otherwise be too big.
590590

591591
</sect2>
592592

593+
<sect2 id="storage-toasterapi">
594+
<title>Toaster API</title>
595+
596+
<para>
597+
Currently, it is possible to develop and assign custom toaster functions, which could
598+
implement different functionality, use other storage strategies and access methods.
599+
This API consists of toast handler header routine and toaster module that implements
600+
main functions defined in Toaster routine.
601+
All toasters are registere in <structname>pg_toaster</structname> table.
602+
</para>
603+
604+
<para>
605+
Toaster API header routine defines main Toast functions that must be implemented by
606+
any custome Toaster:
607+
typedef struct TsrRoutine
608+
{
609+
NodeTagtype;
610+
611+
/* interface functions */
612+
toast_init init;
613+
toast_function toast;
614+
update_toast_function update_toast;
615+
copy_toast_function copy_toast;
616+
detoast_function detoast;
617+
del_toast_function deltoast;
618+
get_vtable_function get_vtable;
619+
toastervalidate_function toastervalidate;
620+
} TsrRoutine;
621+
622+
Custom toaster functions must implement at least methods
623+
toast
624+
detoast
625+
626+
For data storage custom toasters user structure VARATT_CUSTOM
627+
typedef struct varatt_custom
628+
{
629+
int32va_placeholder;/* Placeholder for 2 bits to differ old toast pointer from new */
630+
Oidva_toasterid;/* ID of TOAST handler from PG_TOASTER table */
631+
charva_toasterdata[FLEXIBLE_ARRAY_MEMBER];/* Custom toaster data */
632+
} varatt_custom;
633+
</para>
634+
635+
<para>
636+
Toast functions are added as an extension module, and must be attached to database
637+
accordingly. An example os custom Toaster is provided as DUMMY_TOASTER module:
638+
CREATE EXTENSION dummy_toaster;
639+
640+
Extension header should contain the following information:
641+
CREATE FUNCTION dummy_toaster_handler(internal)
642+
RETURNS toaster_handler
643+
AS 'MODULE_PATHNAME'
644+
LANGUAGE C;
645+
646+
647+
CREATE TOASTER dummy_toaster HANDLER dummy_toaster_handler;
648+
649+
COMMENT ON TOASTER dummy_toaster IS 'dummy_toaster is a dummy toaster';
650+
</para>
651+
652+
</sect2>
653+
593654
</sect1>
594655

595656
<sect1 id="storage-fsm">

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp