You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<dd>An extension is a piece of software that adds functionality to PostgreSQL
5
+
<h3id="extension">WTF is an “extension”?</h3>
6
+
7
+
<p>An extension is a piece of software that adds functionality to PostgreSQL
9
8
itself. Examples are data types (<ahref="https://www.postgresql.org/docs/current/citext.html">citext</a>, <ahref="https://www.postgresql.org/docs/current/hstore.html">hstore</a>), utilities (<ahref="https://www.postgresql.org/docs/current/dblink.html">dblink</a>,
10
9
<ahref="https://pgxn.org/extension/pgtap">pgTAP</a>), and procedural languages (<ahref="https://www.postgresql.org/docs/current/plperl.html">PL/Perl</a>, <ahref="https://github.com/postgres-plr/plr">PL/R</a>), among others. See
11
-
<ahref="https://www.postgresql.org/docs/current/extend.html">Extending SQL</a> for details.</dd>
12
-
13
-
<dt><spanid="allowed"></span></dt>
14
-
<dt>What’s allowed to be released on PGXN?</dt>
15
-
<dd>Open-source PostgreSQL extension release packages. The <ahref="https://manager.pgxn.org/howto">How To</a> documents
16
-
the contents of such packages. Following the <ahref="https://www.cpan.org/misc/ZCAN.html">CPAN example</a>, “no commercial
17
-
software of any kind, not even share/guilt/donateware, will be allowed…any
18
-
other policy would be open to nitpicking, or maybe even legal challenges.”</dd>
19
-
20
-
<dt><spanid="notallowed"></span></dt>
21
-
<dt>What’s not allowed to be released on PGXN?</dt>
22
-
<dd>Non-package files (that is, files that are not tarballs, bzip-balls, or zip
23
-
archives), closed-source distributions, and distributions with no license.</dd>
24
-
25
-
<dt><spanid="whocanrelease"></span></dt>
26
-
<dt>Who can release on PGXN?</dt>
27
-
<dd>Any registered user.</dd>
28
-
29
-
<dt><spanid="whocanregister"></span></dt>
30
-
<dt>Who can register for PGXN?</dt>
31
-
<dd>Anyone who applies. Such registrations will be approved by volunteers, but
32
-
we’re usually pretty quick to respond to requests.</dd>
33
-
34
-
<dt><spanid="howtoapply"></span></dt>
35
-
<dt>So how do I apply?</dt>
36
-
<dd>Head on over to <ahref="https://manager.pgxn.org/">PGXN Manager</a> and hit the “<ahref="https://manager.pgxn.org/account/register">Request Account</a>” link. Once
37
-
you’ve signed up, unless you’re obviously a <ahref="https://en.wikipedia.org/wiki/Troll_(slang)">troll</a>, your account will be
38
-
quickly approved.</dd>
39
-
40
-
<dt><spanid="releaseapproval"></span></dt>
41
-
<dt>Okay, I have an account and want to release an extension. Is there a release</dt>
42
-
<dt>approval process?</dt>
43
-
<dd>Short answer: No, because PGXN needs to <ahref="https://en.wikipedia.org/wiki/KISS_principle">KISS</a>. Longer answer: No. Again
10
+
<ahref="https://www.postgresql.org/docs/current/extend.html">Extending SQL</a> for details.</p>
11
+
12
+
<h3id="allowed">What’s allowed to be released on PGXN?</h3>
13
+
14
+
<p>Open-source PostgreSQL extension release packages. The <ahref="https://manager.pgxn.org/howto">How To</a> documents the
15
+
contents of such packages. Following the <ahref="https://www.cpan.org/misc/ZCAN.html">CPAN example</a>, “no commercial software
16
+
of any kind, not even share/guilt/donateware, will be allowed…any other policy
17
+
would be open to nitpicking, or maybe even legal challenges.”</p>
18
+
19
+
<h3id="notallowed">What’s not allowed to be released on PGXN?</h3>
20
+
21
+
<p>Non-package files (that is, files that are not tarballs, bzip-balls, or zip
22
+
archives), closed-source distributions, and distributions with no license.</p>
23
+
24
+
<h3id="whocanrelease">Who can release on PGXN?</h3>
25
+
26
+
<p>Any registered user.</p>
27
+
28
+
<h3id="whocanregister">Who can register for PGXN?</h3>
29
+
30
+
<p>Anyone who applies. Such registrations will be approved by volunteers, but we’re
31
+
usually pretty quick to respond to requests.</p>
32
+
33
+
<h3id="howtoapply">So how do I apply?</h3>
34
+
35
+
<p>Head on over to <ahref="https://manager.pgxn.org/">PGXN Manager</a> and hit the “<ahref="https://manager.pgxn.org/account/register">Request Account</a>” link. Once you’ve
36
+
signed up, unless you’re obviously a <ahref="https://en.wikipedia.org/wiki/Troll_(slang)">troll</a>, your account will be quickly
37
+
approved.</p>
38
+
39
+
<h3id="releaseapproval">Okay, I have an account and want to release an extension. Is there a release approval process?</h3>
40
+
41
+
<p>Short answer: No, because PGXN needs to <ahref="https://en.wikipedia.org/wiki/KISS_principle">KISS</a>. Longer answer: No. Again
44
42
following the <ahref="https://www.cpan.org/misc/ZCAN.html">CPAN example</a>, PGXN “is and will stay an open and free forum,
45
43
where the authors decide what they upload. Any further selection belongs to
46
-
different fora.” This is because “the first goal of PGXN is to make it easy
47
-
to submit code and redistribute it. Ease of use and quality control are not
48
-
the central problems ~[it~] tries to solve.” (Original quotation lost to
49
-
time and internet entropy.) Frankly, moderation of releases is a significant
50
-
reason that other communities have failed to duplicate the success of CPAN.</dd>
51
-
52
-
<dt><spanid="howto"></span></dt>
53
-
<dt>Great, so how do I create an extension distribution and release it?</dt>
54
-
<dd>Basically, you upload an archive file with a <ahref="https://pgxn.org/spec/">META.json</a> file describing the
55
-
distribution. Have a look at the <ahref="https://manager.pgxn.org/howto">How To</a> for all the details.</dd>
56
-
57
-
<dt><spanid="github"></span></dt>
58
-
<dt>I read that, but it seems like an awful lot of work for something that should be</dt>
59
-
<dt>automated. Is there any way I can automatically have my extension appear on PGXN</dt>
60
-
<dt>when I make a release on GitHub?</dt>
61
-
<dd><p>Yes! You can use the <ahref="https://github.com/pgxn/docker-pgxn-tools">pgxn-tools</a> Docker image as part of your release
44
+
different fora.” This is because “the first goal of PGXN is to make it easy to
45
+
submit code and redistribute it. Ease of use and quality control are not the
46
+
central problems ~[it~] tries to solve.” (Original quotation lost to time and
47
+
internet entropy.) Frankly, moderation of releases is a significant reason that
48
+
other communities have failed to duplicate the success of CPAN.</p>
49
+
50
+
<h3id="howto">Great, so how do I create an extension distribution and release it?</h3>
51
+
52
+
<p>Basically, you upload an archive file with a <ahref="https://pgxn.org/spec/">META.json</a> file describing the
53
+
distribution. Have a look at the <ahref="https://manager.pgxn.org/howto">How To</a> for all the details.</p>
54
+
55
+
<h3id="github">I read that, but it seems like an awful lot of work for something that should be automated. Is there any way I can automatically have my extension appear on PGXN when I make a release on GitHub?</h3>
56
+
57
+
<p>Yes! You can use the <ahref="https://github.com/pgxn/docker-pgxn-tools">pgxn-tools</a> Docker image as part of your release
62
58
workflows. It supports both testing an extension with multiple versions of
63
-
Postgres, as well as releasing extensions on GitHub and PGXN. For details,
64
-
check out these blog posts:</p>
59
+
Postgres, as well as releasing extensions on GitHub and PGXN. For details, check
60
+
out these blog posts:</p>
65
61
66
62
<ul>
67
63
<li><ahref="https://justatheory.com/2020/06/test-extensions-with-github-actions/">Test Postgres Extensions With GitHub Actions</a></li>
68
64
<li><ahref="https://justatheory.com/2020/10/release-postgres-extensions-with-github-actions/">Automate Postgres Extension Releases on GitHub and PGXN</a></li>
69
-
</ul></dd>
70
-
71
-
<dt><spanid="maillist"></dt>
72
-
<dt>Is there some place I can go to ask questions and get help from like-minded PGXN</dt>
73
-
<dt>contributors?</dt>
74
-
<dd>Yes, there is a <ahref="https://groups.google.com/group/pgxn-users">Google Group</a> for this very purpose. Join us!</dd>
75
-
76
-
<dt><spanid="goodbadugly"></span></dt>
77
-
<dt>How does PGXN make it easy to distinguish the garbage from the viable</dt>
78
-
<dt>extensions?</dt>
79
-
<dd>The first step is the PGXN search engine, accessible via the <ahref="https://pgxn.org/">home page</a>,
80
-
which will allow you to find extensions relevant to you and to read their
81
-
documentation. This will “often ~[be~] enough to distinguish the good stuff
82
-
from the crap,” as <ahref="https://www.postgresql.org/message-id/603c8f071001061718t40e42609y59a26165bb72ff01@mail.gmail.com">Robert Haas says</a>. As more extensions are released on
83
-
PGXN with competing features and functionality, the addition of ratings
84
-
features and dedicated testing will also make it easier to evaluate
85
-
competing options.</dd>
86
-
</dl>
65
+
</ul>
66
+
67
+
<h3id="maillist">Is there some place I can go to ask questions and get help from like-minded PGXN contributors?</h3>
68
+
69
+
<p>Yes, there is a <ahref="https://groups.google.com/group/pgxn-users">Google Group</a> for this very purpose. Join us!</p>
70
+
71
+
<h3id="goodbadugly">How does PGXN make it easy to distinguish the garbage from the viable extensions?</h3>
72
+
73
+
<p>The first step is the PGXN search engine, accessible via the <ahref="https://pgxn.org/">home page</a>, which
74
+
will allow you to find extensions relevant to you and to read their
75
+
documentation. This will “often ~[be~] enough to distinguish the good stuff from
76
+
the crap,” as <ahref="https://www.postgresql.org/message-id/603c8f071001061718t40e42609y59a26165bb72ff01@mail.gmail.com">Robert Haas says</a>. As more extensions are released on PGXN with
77
+
competing features and functionality, the addition of ratings features and
78
+
dedicated testing will also make it easier to evaluate competing options.</p>
87
79
88
80
<h2id="pgxnclient">PGXN Client</h2>
89
81
90
-
<dl>
91
-
<dt><spanid="commandlineclient"></span></dt>
92
-
<dt>Is there a command-line client for installing extensions from PGXN?</dt>
93
-
<dd><p>There is! Install it with this command:</p>
82
+
<h3id="commandlineclient">Is there a command-line client for installing extensions from PGXN?</h3>
<p>Run <code>pgxn help</code> to get a list of supported commands; or check out the
109
100
introductory <ahref="https://blog.pgxn.org/post/5026314153/writing-a-client-for-pgxn">blog</a><ahref="https://blog.pgxn.org/post/5118152273/new-release-for-the-pgxn-client">posts</a>, the <ahref="https://pgxn.github.io/pgxnclient/">complete documentation</a> or the <ahref="https://github.com/pgxn/pgxnclient">source
110
-
code</a>.</p></dd>
111
-
112
-
<dt><spanid="howclientworks"></span></dt>
113
-
<dt>How does the command-line client work?</dt>
114
-
<dd>It uses JSON-based API available on every PGXN mirror to find, download,
115
-
build, and install extensions. It relies on <ahref="https://www.postgresql.org/docs/current/extend-pgxs.html">PGXS</a> to do the heavy lifting
116
-
to build extensions.</dd>
117
-
118
-
<dt><spanid="clientwindows"></span></dt>
119
-
<dt>What about Windows?</dt>
120
-
<dd>The PGXN client follows the lead of the PostgreSQL core on installing
121
-
extensions. If support for installing extensions on Windows improves such
122
-
that a compiler is no longer required, the PGXN client will be modified as
123
-
appropriate to take advantage of it. This applies not specifically to
124
-
Windows, but to the ability of the core installer (or any future
125
-
community-supported installer) to work on <em>any</em> platform.</dd>
126
-
127
-
<dt><spanid="clientsecurity"></span></dt>
128
-
<dt>What kind of security does PGXN have?</dt>
129
-
<dd>Each release package has an accompanying SHA1 hash that the PGXN client
130
-
verifies before installing an extension.</dd>
131
-
</dl>
101
+
code</a>.</p>
102
+
103
+
<h3id="howclientworks">How does the command-line client work?</h3>
104
+
105
+
<p>It uses JSON-based API available on every PGXN mirror to find, download, build,
106
+
and install extensions. It relies on <ahref="https://www.postgresql.org/docs/current/extend-pgxs.html">PGXS</a> to do the heavy lifting to build
107
+
extensions.</p>
108
+
109
+
<h3id="clientwindows">What about Windows?</h3>
110
+
111
+
<p>The PGXN client follows the lead of the PostgreSQL core on installing
112
+
extensions. If support for installing extensions on Windows improves such that a
113
+
compiler is no longer required, the PGXN client will be modified as appropriate
114
+
to take advantage of it. This applies not specifically to Windows, but to the
115
+
ability of the core installer (or any future community-supported installer) to
116
+
work on <em>any</em> platform.</p>
117
+
118
+
<h3id="clientsecurity">What kind of security does PGXN have?</h3>
119
+
120
+
<p>Each release package has an accompanying SHA1 hash that the PGXN client verifies
121
+
before installing an extension.</p>
132
122
133
123
<h2id="contributingtopgxn">Contributing to PGXN</h2>
134
124
135
-
<dl>
136
-
<dt><spanid="license"></span></dt>
137
-
<dt>Under what license is PGXN’s source code distributed?</dt>
138
-
<dd><ahref="https://www.postgresql.org/about/licence/">The PostgreSQL License</a>. Note that the actual extensions themselves may be
139
-
under any open source license, determined by their authors.</dd>
140
-
141
-
<dt><spanid="contribute"></span></dt>
142
-
<dt>Can other people contribute to PGXN?</dt>
143
-
<dd>Definitely! Contributions and help with refining the specification are very
144
-
welcome. Major code contributions may be funded out of the PGXN fund based
145
-
on circumstances. Any contributions must be submitted under The PostgreSQL
146
-
License.</dd>
147
-
148
-
<dt><spanid="mirroring"></span></dt>
149
-
<dt>What about mirroring? Can I create a PGXN mirror?</dt>
150
-
<dd>Absolutely! See <ahref="https://pgxn.org/mirroring/">mirroring</a> for the details.</dd>
151
-
152
-
<dt><spanid="owners"></span></dt>
153
-
<dt>Who owns and runs PGXN?</dt>
154
-
<dd>Currently, PGXN is hosted on a box owned by <ahref="https://www.depesz.com">depesz</a>. Eventually it may run
155
-
on community servers, as the PostgreSQL.org Web Team determines. Or it may
156
-
end up on one or more servers to be contributed to the <ahref="https://www.postgresql.org/about/policies/funds-group/">PostgreSQL Funds
157
-
Group</a>. In any case, the PGXN master index and server will always be
158
-
contributed to the PostgreSQL community.</dd>
159
-
160
-
<dt><spanid="source"></span></dt>
161
-
<dt>Where is the PGXN source code hosted?</dt>
162
-
<dd><ahref="https://github.com/pgxn/">On GitHub</a>. Please feel free to fork and send pull requests!</dd>
163
-
164
-
<dt><spanid="language"></span></dt>
165
-
<dt>What language is PGXN written in?</dt>
166
-
<dd>Mostly Perl. The database used by <ahref="https://manager.pgxn.org/">PGXN Manager</a> is written in SQL,
167
-
PL/pgSQL, and PL/Perl — and even uses <ahref="https://pgxn.org/extension/semver">semver</a>, a <ahref="https://semver.org/">semantic version</a> data
168
-
type written in C and distributed right here on PGXN!</dd>
169
-
170
-
<dt><spanid="api"></span></dt>
171
-
<dt>Is there an API?</dt>
172
-
<dd>Yes! The <ahref="https://github.com/pgxn/pgxn-api/wiki/">PGXN API</a> provides centralized index and API of distribution
173
-
metadata, as well as the search APIs used here.</dd>
174
-
175
-
<dt><spanid="logos"></span></dt>
176
-
<dt>Is the PGXN logo available for use?</dt>
177
-
<dd>Yes, see <ahref="https://pgxn.org/art/">identity</a> for the license details and downloadable artwork.</dd>
178
-
</dl>
125
+
<h3id="license">Under what license is PGXN’s source code distributed?</h3>
126
+
127
+
<p><ahref="https://www.postgresql.org/about/licence/">The PostgreSQL License</a>. Note that the actual extensions themselves may be
128
+
under any open source license, determined by their authors.</p>
129
+
130
+
<h3id="contribute">Can other people contribute to PGXN?</h3>
131
+
132
+
<p>Definitely! Contributions and help with refining the specification are very
133
+
welcome. Major code contributions may be funded out of the PGXN fund based on
134
+
circumstances. Any contributions must be submitted under The PostgreSQL License.</p>
135
+
136
+
<h3id="mirroring">What about mirroring? Can I create a PGXN mirror?</h3>
137
+
138
+
<p>Absolutely! See <ahref="https://pgxn.org/mirroring/">mirroring</a> for the details.</p>
139
+
140
+
<h3id="owners">Who owns and runs PGXN?</h3>
141
+
142
+
<p>Currently, PGXN is hosted on a box owned by <ahref="https://www.depesz.com">depesz</a>. Eventually it may run on
143
+
community servers, as the PostgreSQL.org Web Team determines. Or it may end up
144
+
on one or more servers to be contributed to the <ahref="https://www.postgresql.org/about/policies/funds-group/">PostgreSQL Funds Group</a>. In any
145
+
case, the PGXN master index and server will always be contributed to the
146
+
PostgreSQL community.</p>
147
+
148
+
<h3id="source">Where is the PGXN source code hosted?</h3>
149
+
150
+
<p><ahref="https://github.com/pgxn/">On GitHub</a>. Please feel free to fork and send pull requests!</p>
151
+
152
+
<h3id="language">What language is PGXN written in?</h3>
153
+
154
+
<p>Mostly Perl. The database used by <ahref="https://manager.pgxn.org/">PGXN Manager</a> is written in SQL, PL/pgSQL,
155
+
and PL/Perl — and even uses <ahref="https://pgxn.org/extension/semver">semver</a>, a <ahref="https://semver.org/">semantic version</a> data type written in
156
+
C and distributed right here on PGXN!</p>
157
+
158
+
<h3id="api">Is there an API?</h3>
159
+
160
+
<p>Yes! The <ahref="https://github.com/pgxn/pgxn-api/wiki/">PGXN API</a> provides centralized index and API of distribution metadata,
161
+
as well as the search APIs used here.</p>
162
+
163
+
<h3id="logos">Is the PGXN logo available for use?</h3>
179
164
165
+
<p>Yes, see <ahref="https://pgxn.org/art/">identity</a> for the license details and downloadable artwork.</p>
0 commit comments