Kopia tabeli w PostgreSQL

-- tworzymy nową tabelę
CREATE TABLE nowa_tabela (LIKE stara_tabela INCLUDING all);

-- usuwamy domyślną wartość dla kolumny z primary key
ALTER TABLE nowa_tabela ALTER st_id DROP DEFAULT;

-- kopiujemy zawartość starej tabeli do nowej
INSERT INTO nowa_tabela SELECT * FROM stara_tabela;

-- zmiana nazwy kolumny z primary key
ALTER TABLE nowa_tabela RENAME COLUMN st_id TO nt_id;

-- tworzymy generator kolejnych liczb - auto increment
CREATE SEQUENCE nowa_tabela_nt_id_seq;

-- ustawiamy ostatni id w generatorze
SELECT setval('nowa_tabela_nt_id_seq', (SELECT max(st_id) FROM stara_tabela), true);

-- przypisujemy kolumnie z primary key generator
ALTER TABLE nowa_tabela ALTER nt_id SET DEFAULT nextval('nowa_tabela_nt_id_seq');

-- i robimy go właścicielem tego generatora
ALTER SEQUENCE nowa_tabela_nt_id_seq OWNED BY nowa_tabela.nt_id;

Odtwarzanie bazy postgresql z kopii zapasowej

skrypt.sh

 #!/bin/bash
 if ["$(whoami)" != "root"]; then
     echo "Uruchom skrypt jako root!"
     exit 1
 fi
 _DBNAME="$1"
 while [ -z "$_DBNAME" ]; do
     echo "Podaj nazwe bazy!"
     read _DBNAME
 done
 _DBUSER="$2"
 while [ -z "$_DBUSER" ]; do
     echo "Podaj nazwe uzytkownika!"
     read _DBUSER
 done
 _PATH="$3"
 while [ -z "$_PATH" ]; do
     echo "Podaj sciezke do dump\'a bazy!"
     read _PATH
 done
 service postgresql restart
 su - postgres -c "dropdb $_DBNAME"
 su - postgres -c "createdb $_DBNAME -O $_DBUSER"
 su - postgres -c "psql $_DBNAME < $_PATH"