Wiki

Version 2 (Ivan Lezhnjov, 10/28/2016 06:49 AM)

1 1 Ivan Lezhnjov
h1. postgresql-snap
2 1 Ivan Lezhnjov
3 1 Ivan Lezhnjov
This is a collection of "snapcraft recipes":https://github.com/commandprompt/postgresql-snap for PostgreSQL 9.3, 9.4, 9.5 and 9.6 that can be used to create PostgreSQL snap packages. 
4 1 Ivan Lezhnjov
5 1 Ivan Lezhnjov
The packages are maintained as a service to the community by Command Prompt, Inc. A PostgreSQL and Linux Professional services company. You can find Command Prompt on the web at https://commandprompt.com
6 1 Ivan Lezhnjov
7 1 Ivan Lezhnjov
h1. Get binaries
8 1 Ivan Lezhnjov
9 1 Ivan Lezhnjov
If you don't want to build the binaries but instead just want to install the packages, run this command:
10 1 Ivan Lezhnjov
11 1 Ivan Lezhnjov
<pre>
12 1 Ivan Lezhnjov
$ sudo snap install postgresql$version
13 1 Ivan Lezhnjov
</pre>
14 1 Ivan Lezhnjov
15 1 Ivan Lezhnjov
Where $version is one of 93, 94, 95 or 96.
16 1 Ivan Lezhnjov
17 1 Ivan Lezhnjov
h1. Build
18 1 Ivan Lezhnjov
19 1 Ivan Lezhnjov
Simply run @snapcraft@ inside any of the postgresql9*/ directories.
20 1 Ivan Lezhnjov
21 1 Ivan Lezhnjov
h1. Install
22 1 Ivan Lezhnjov
23 1 Ivan Lezhnjov
If you want to install a local snap package run this command:
24 1 Ivan Lezhnjov
25 1 Ivan Lezhnjov
<pre>
26 1 Ivan Lezhnjov
$ sudo snap install --force-dangerous postgresql96_9.6.0_amd64.snap
27 1 Ivan Lezhnjov
</pre>
28 1 Ivan Lezhnjov
29 1 Ivan Lezhnjov
To install from Ubuntu Store simply run:
30 1 Ivan Lezhnjov
31 1 Ivan Lezhnjov
<pre>
32 1 Ivan Lezhnjov
$ sudo snap install postgresql96
33 1 Ivan Lezhnjov
</pre>
34 1 Ivan Lezhnjov
35 1 Ivan Lezhnjov
h1. postgres User
36 1 Ivan Lezhnjov
37 1 Ivan Lezhnjov
Traditionally, you would run PostgreSQL as an unprivileged @postgres@ user. This user has to be created manually.
38 1 Ivan Lezhnjov
39 1 Ivan Lezhnjov
<pre>
40 1 Ivan Lezhnjov
$ adduser postgres
41 1 Ivan Lezhnjov
</pre>
42 1 Ivan Lezhnjov
43 1 Ivan Lezhnjov
Beware, that if you already have PostgreSQL installed on your system through an APT/PPA repository, the postgres system account most likely already exists. You must use a different system account in that case. For example, pgsql or postgsql. It can be an arbitrary name: admin, joe, malcolm, etc.
44 1 Ivan Lezhnjov
45 1 Ivan Lezhnjov
Do not use an existing postgres system account that was created during PostgreSQL installation from standard Ubuntu, PGDG or custom PPA repositories. If you want to run both snap package and traditional deb version of PostgreSQL, create a new account.
46 1 Ivan Lezhnjov
47 1 Ivan Lezhnjov
h1. Cluster Initialization
48 1 Ivan Lezhnjov
49 1 Ivan Lezhnjov
As postgres user run
50 1 Ivan Lezhnjov
51 1 Ivan Lezhnjov
<pre>
52 1 Ivan Lezhnjov
$ postgresql96.initialize initdb
53 1 Ivan Lezhnjov
</pre>
54 1 Ivan Lezhnjov
55 1 Ivan Lezhnjov
This will set up your environment, call initdb and create a default cluster.
56 1 Ivan Lezhnjov
57 1 Ivan Lezhnjov
To start PostgreSQL server run:
58 1 Ivan Lezhnjov
59 1 Ivan Lezhnjov
<pre>
60 1 Ivan Lezhnjov
$ postgresql96.pgctl -D /home/postgres/snap/postgresql96/x1/data -l /home/admin/snap/postgresql96/x1/logs/logfile start
61 1 Ivan Lezhnjov
</pre>
62 1 Ivan Lezhnjov
63 1 Ivan Lezhnjov
Similarly, you can use pg_ctl to run usual commands: stop, restart, status, etc.
64 1 Ivan Lezhnjov
65 1 Ivan Lezhnjov
<pre>
66 1 Ivan Lezhnjov
$ postgresql96.pgctl -D /home/postgres/snap/postgresql96/x1/data -l /home/admin/snap/postgresql96/x1/logs/logfile stop
67 1 Ivan Lezhnjov
</pre>
68 1 Ivan Lezhnjov
69 1 Ivan Lezhnjov
<pre>
70 1 Ivan Lezhnjov
$ postgresql96.pgctl -D /home/postgres/snap/postgresql96/x1/data -l /home/admin/snap/postgresql96/x1/logs/logfile restart
71 1 Ivan Lezhnjov
</pre>
72 1 Ivan Lezhnjov
73 1 Ivan Lezhnjov
<pre>
74 1 Ivan Lezhnjov
$ postgresql96.pgctl -D /home/postgres/snap/postgresql96/x1/data -l /home/admin/snap/postgresql96/x1/logs/logfile status
75 1 Ivan Lezhnjov
</pre>
76 1 Ivan Lezhnjov
77 1 Ivan Lezhnjov
h1. Connect To PostgreSQL
78 1 Ivan Lezhnjov
79 1 Ivan Lezhnjov
<pre>
80 1 Ivan Lezhnjov
$ postgresql96.psql -h 127.0.0.1 -d postgres
81 1 Ivan Lezhnjov
</pre>
82 1 Ivan Lezhnjov
83 1 Ivan Lezhnjov
h1. Known Problems and Limitations
84 1 Ivan Lezhnjov
85 1 Ivan Lezhnjov
Snap format imposes a number of non-critical and more serious limitations:
86 1 Ivan Lezhnjov
87 1 Ivan Lezhnjov
* Only one locale is currently supported – en_US.UTF-8.
88 1 Ivan Lezhnjov
* There is no systemd service file for postgres daemon. PostgreSQL has to be managed manually by using pg_ctl.
89 1 Ivan Lezhnjov
* pg_ctl is run via a BASH wrapper to make it aware of a default system locale (en_US.UTF-8).
90 1 Ivan Lezhnjov
* psql is also run via a BASH wrapper to let it successfully write to HISTFILE (.psql_history)
91 1 Ivan Lezhnjov
* Kerberos, GSSAPI and Bonjour support is disabled.
92 1 Ivan Lezhnjov
* contrib modules are not included. These do not build due to snapcraft's make plugin inability to handle an included via a relative path Makefile inside another Makefile.
93 1 Ivan Lezhnjov
94 1 Ivan Lezhnjov
We intend to eliminate as many of these limitations as possible in future versions of these snapcraft recipes. Most of them are a result of various design decisions made by snapcraft developers that don't work well with how PostgreSQL build process works. However, snapcraft is a young, rapidly developing project and things may change sooner rather than later.