summaryrefslogtreecommitdiffstats
path: root/upgrade-scripts/SPECIFICATION
blob: 367a1b3ca0fdf9e7ce3597550bb0bacc735b8197 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
postgresql-common upgrade script infrastructure
===============================================

Purpose
-------

These scripts are executed on upgrades of postgresql-common. They can be used
to perform version-specific or common tasks on all databases or all clusters
(like doing security updates on already existing databases, do format
conversions, and so on).

Conventions
-----------

File names must have the following format:

  version_name_scope.suffix

Files can either be SQL scripts with a "sql" suffix, or executable scripts with
any other suffix.

Files not following these conventions (like this README file) are ignored.

version: 
  This specifies a version number of postgresql-common. If the package
  is upgraded from a version less than or equal to this number, the script is
  applied. If version is "all", the script is always applied regardless of the
  already installed version.

name:
  This name is displayed when calling the script as an information for the
  user.

scope:
  db: The script is called/applied for each existing database of all clusters,
      but not to template1 and template0.
  t1: The script is additionally applied to all template1 databases.
  t0: The script is additionally applied to all template0 databases.
  cluster: The script is called once for each existing cluster.

suffix:
  ".sql" for SQL scripts, arbitrary (also empty) for executable scripts.

SQL Scripts
-----------
Per-database scripts are fed to psql which is called as cluster superuser on
the currently processed database. Per-cluster scripts are called with
connecting to template1.

Executable scripts
------------------
Scripts receive the following arguments:

  <version> <cluster> <database name>

<database name> will always be "template1" for cluster-scope scripts.
On success, they must exit with 0; on error, they should write error
messages to stdout and exit with nonzero. stdout is then displayed as
a failure message.