@@ -14,21 +14,16 @@ hooks:
1414    - replace :
1515       filename : /etc/service/unicorn/run 
1616       from : " # postgres" 
17-        to : sv start postgres || exit 1 
17+        to : | 
18+          if [ -f /root/install_postgres ]; then 
19+            /root/install_postgres 
20+            rm /root/install_postgres 
21+          fi 
22+          sv start postgres || exit 1 
1823
1924run :
20-   - exec : sed -i "s/^# $LANG/$LANG/" /etc/locale.gen 
21-   - exec : locale-gen && update-locale 
22-   - exec : mkdir -p /shared/postgres_run 
23-   - exec : chown postgres:postgres /shared/postgres_run 
24-   - exec : chmod 775 /shared/postgres_run 
25-   - exec : rm -fr /var/run/postgresql 
26-   - exec : ln -s /shared/postgres_run /var/run/postgresql 
27-   - exec : socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1 
28-   - exec : rm -fr /shared/postgres_run/.s* 
29-   - exec : rm -fr /shared/postgres_run/*.pid 
30-   - exec : mkdir -p /shared/postgres_run/13-main.pg_stat_tmp 
31-   - exec : chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp 
25+   - exec : DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector 
26+   - exec : apt-get update && apt-get install -y postgresql-13 postgresql-client-13 postgresql-contrib-13 postgresql-13-pgvector 
3227  - file :
3328     path : /etc/service/postgres/run 
3429     chmod : " +x" 
5348       sv stop postgres 
5449
5550   - file :
56-      path : /root/upgrade_postgres 
57-      chmod : " +x" 
58-      contents : | 
59-        #!/bin/bash 
60-        PG_MAJOR_OLD=`cat /shared/postgres_data/PG_VERSION` 
61- 
62-        if [ ! "13" = "$PG_MAJOR_OLD" ]; then 
63-          echo Upgrading PostgreSQL from version ${PG_MAJOR_OLD} to 13 
64-          free_disk=$(df -P -B1 /shared | tail -n 1 | awk '{print $4}') 
65-          required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2)) 
66- 
67-          if [ "$free_disk" -lt "$required" ]; then 
68-           echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space" 
69-           echo "Please free up some space, or expand your disk, before continuing." 
70-           echo '' 
71-           echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.12.template.yml" in containers/app.yml' 
72-           exit 1 
73-          fi 
74- 
75-          if [ -d /shared/postgres_data_old ]; then 
76-            mv /shared/postgres_data_old /shared/postgres_data_older 
77-          fi 
78- 
79-          rm -fr /shared/postgres_data_new 
80-          install -d -m 0755 -o postgres -g postgres /shared/postgres_data_new && sudo -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data_new || exit 0 
81-          apt-get update 
82-          apt-get install -y postgresql-${PG_MAJOR_OLD} 
83-          chown -R postgres:postgres /var/lib/postgresql/13 
84-          /etc/init.d/postgresql stop 
85-          rm -fr /shared/postgres_data/postmaster.pid 
86-          cd ~postgres 
87-          cp -pr /etc/postgresql/${PG_MAJOR_OLD}/main/* /shared/postgres_data 
88-          echo  >> /shared/postgres_data/postgresql.conf 
89-          echo "data_directory = '/shared/postgres_data'" >> /shared/postgres_data/postgresql.conf 
90-          SUCCESS=true 
91-          sudo -u postgres /usr/lib/postgresql/13/bin/pg_upgrade -d /shared/postgres_data -D /shared/postgres_data_new -b /usr/lib/postgresql/${PG_MAJOR_OLD}/bin -B /usr/lib/postgresql/13/bin || SUCCESS=false 
92- 
93-          if [[ "$SUCCESS" == 'false' ]]; then 
94-            echo ------------------------------------------------------------------------------------- 
95-            echo UPGRADE OF POSTGRES FAILED 
96-            echo 
97-            echo Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support. 
98-            echo 
99-            echo You can run "./launcher start app" to restart your app in the meanwhile 
100-            echo 
101-            exit 1 
102-          fi 
103- 
104-          mv /shared/postgres_data /shared/postgres_data_old 
105-          mv /shared/postgres_data_new /shared/postgres_data 
106- 
107-          echo ------------------------------------------------------------------------------------- 
108-          echo UPGRADE OF POSTGRES COMPLETE 
109-          echo 
110-          echo Old ${PG_MAJOR_OLD} database is stored at /shared/postgres_data_old 
111-          echo 
112-          echo To complete the upgrade, rebuild again using: 
113-          echo 
114-          echo     ./launcher rebuild app 
115-          echo ------------------------------------------------------------------------------------- 
116-          # Magic exit status to denote no failure 
117-          exit 77 
118-        fi 
119- 
120-    - exec :
121-       cmd :
122-         - chown -R root /var/lib/postgresql/13/main 
123-         - " [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0" 
124-         - chown -R postgres:postgres /shared/postgres_data 
125-         - chown -R postgres:postgres /var/run/postgresql 
126- 
127-   - exec : /root/upgrade_postgres 
128-   - exec : rm /root/upgrade_postgres 
51+       path : /root/install_postgres 
52+       chmod : " +x" 
53+       contents : | 
54+         #!/bin/bash -x 
55+         sed -i "s/^# $LANG/$LANG/" /etc/locale.gen 
56+         locale-gen && update-locale 
57+         mkdir -p /shared/postgres_run 
58+         chown postgres:postgres /shared/postgres_run 
59+         chmod 775 /shared/postgres_run 
60+         rm -fr /var/run/postgresql 
61+         ln -s /shared/postgres_run /var/run/postgresql 
62+         if [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then 
63+           socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1 
64+         fi 
65+         rm -fr /shared/postgres_run/.s* 
66+         rm -fr /shared/postgres_run/*.pid 
67+         mkdir -p /shared/postgres_run/13-main.pg_stat_tmp 
68+         chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp 
69+         chown -R root /var/lib/postgresql/13/main 
70+         [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0 
71+         chown -R postgres:postgres /shared/postgres_data 
72+         chown -R postgres:postgres /var/run/postgresql 
73+         # Necessary to enable backups 
74+         install -d -m 0755 -o postgres -g postgres /shared/postgres_backup 
12975
13076   - replace :
13177      filename : " /etc/postgresql/13/main/postgresql.conf" 
@@ -162,11 +108,6 @@ run:
162108      from : /#?default_text_search_config *=.*/ 
163109      to : " default_text_search_config = '$db_default_text_search_config'" 
164110
165-   #  Necessary to enable backups
166-   - exec :
167-       cmd :
168-         - install -d -m 0755 -o postgres -g postgres /shared/postgres_backup 
169- 
170111  - replace :
171112      filename : " /etc/postgresql/13/main/postgresql.conf" 
172113      from : /#?checkpoint_segments *=.*/ 
@@ -200,29 +141,39 @@ run:
200141      to : " host all all ::/0 md5" 
201142
202143  - exec :
144+       tag : db 
145+       cmd : | 
146+         if [ -f /root/install_postgres ]; then 
147+           /root/install_postgres && rm -f /root/install_postgres 
148+         elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then 
149+           socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1 
150+         fi 
151+ 
152+    - exec :
153+       tag : db 
203154      background : true 
204155      #  use fast shutdown for pg
205156      stop_signal : INT 
206157      cmd : HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main 
207158
208-   #  give db a few secs to start up 
209-   -  exec :  " sleep 5 " 
210- 
211-   -  exec :  su postgres -c 'createdb $db_name' || true 
212-   -  exec :  su postgres -c 'psql $db_name -c "create user $db_user;"' || true 
213-   -  exec :  su postgres -c 'psql  $db_name -c "grant all privileges on database $db_name to $db_user;" ' || true 
214-   -  exec :  su postgres -c 'psql $db_name -c "alter schema public owner to  $db_user;"' 
215-   -  exec :  su postgres -c 'psql template1  -c "create extension if not exists hstore ;"' 
216-   -  exec :  su postgres -c 'psql template1  -c "create extension if not exists pg_trgm ;"' 
217-   -  exec :  su postgres -c 'psql template1 -c "create extension if not exists vector ;"' 
218-   -  exec :  su postgres -c 'psql $db_name  -c "create extension if not exists hstore ;"' 
219-   -  exec :  su postgres -c 'psql $db_name  -c "create extension if not exists pg_trgm ;"' 
220-   -  exec :  su postgres -c 'psql $db_name  -c "create  extension if not exists  vector;"' 
221-   -  exec : 
222-       stdin :  | 
223-         update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');  
224-        cmd :  sudo -u  postgres psql $db_name
225-       raise_on_fail :  false 
159+   -  file : 
160+        path :  /usr/local/bin/create_db 
161+        chmod :  +x 
162+        contents :  | 
163+         #!/bin/bash  
164+          su postgres -c 'createdb  $db_name' || true  
165+          su postgres -c 'psql $db_name -c "create user  $db_user;"' ||  true  
166+          su postgres -c 'psql $db_name  -c "grant all privileges on database $db_name to $db_user ;"' ||  true  
167+          su postgres -c 'psql $db_name  -c "alter schema public owner to $db_user ;"' 
168+          su postgres -c 'psql template1 -c "create extension if not exists hstore ;"' 
169+          su postgres -c 'psql template1  -c "create extension if not exists pg_trgm ;"' 
170+          su postgres -c 'psql template1  -c "create extension if not exists vector ;"' 
171+          su postgres -c 'psql template1  -c "alter  extension vector update ;"' ||  true  
172+         su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'  
173+         su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'  
174+         su postgres -c 'psql $db_name -c "create extension if not exists vector;"'  
175+         su  postgres -c ' psql $db_name -c "alter extension vector update;"' ||  true  
176+         sudo -u postgres psql $db_name <<< "update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');" ||  true  
226177
227178   - file :
228179     path : /var/lib/postgresql/take-database-backup 
@@ -243,5 +194,10 @@ run:
243194        #0 */4 * * * /var/lib/postgresql/take-database-backup 
244195
245196   - exec :
197+       tag : db 
246198      hook : postgres 
247-       cmd : " echo postgres installed!" 
199+       cmd :
200+         #  give db a few secs to start up
201+         - " sleep 5" 
202+         - /usr/local/bin/create_db 
203+         - " echo postgres installed!" 
0 commit comments