postgres の変更点   

  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • postgres へ行く。

#author("2022-01-31T00:51:42+00:00","default:pentacle","pentacle")
* 旧記事 [#h831957f]
[[postgres-old]]

* 移植前準備 [#q71a103c]
 旧バージョン postgres が立ち上がっている状態で
 pg_dump 【dbname】 > dbname.dump

* install [#nb7e7697]
*** 本体 [#o1143234]
 yum install postgresql postgresql-server postgresql-devel

*** php モジュール [#k12c3527]
 # apt-get install php-pgsql

*** perl モジュール [#p6831ff8]
 yum install perl-DBI-Pg

* pgcommand [#ab882926]

*** フルバックアップ [#se4ccff0]
> pg_dump -Fc -b データベース名 > db_archive.dump
これで、db_archive.dump にデータが出力されます。このファイルはバイナリですが、圧縮されているので、大きなデータベースをバックアップするときには効率的です。また、このデータから復元させるには、次のように行います。 

*** リストア [#w591a071]
> createdb -T template0 データベース名
> pg_restore -d データベース名 db_archive.dump
これで、データベースが復元されます。-T template0 は必ず指定してください(理由を知りたい場合は、マニュアルを参照してください)。また pg_dumpall は、全てのデータベースのバックアップを行います。したがって、データベース名を指定する必要はありません。これらのコマンドは、データベースのバージョンアップを行うときにも使用できます。PostgreSQL の場合、バージョンアップを行うと、データベースファイルの互換性がなくなる場合があります。その場合は、これらのコマンドを使ってデータを移行する必要があります。 

場合によっては、テーブル単位でバックアップとを取り、テーブル単位でデータを復元したい場合もあるかと思います。テストしてるときとかは、重宝します。それには次のようにします。 

*** テーブル単位バックアップ [#c50be44c]
> pg_dump -t テーブル データベース名 > dump.out

*** テーブル単位復元 [#pda3943d]
> psql データベース名 < dump.out

*** COPY の代わりに INSERT 文 [#ve62e625]
''dump''
 pg_dump -U 【ユーザ】 【DB】 -t 【テーブル名】 --column-inserts > tablename.sql

''restore''
 psql -U 【ユーザ】 【DB】 < tablename.sql



* windows 版 [#r0698710]
export PGHOST=localhost

*** pg_hba [#t9a0d1f9]
windows
 /cygdrive/c/Program Files/PostgreSQL/9.4/data

''pg_hba''
 host    all             all             127.0.0.1/32            md5

''postgres.conf''
 listen_addresses = '*'


*** postgres.conf [#we964f0b]
 max_connection=400
 lc_messages = 'en_US'

* psql コマンド [#q882f529]
|\d            |table一覧          |
|\d 【table名】|tableカラム定義一覧|
|\l            |database 一覧      |
|current_date  ||

* csv [#a5abac9c]
 psql TESTDB -c "COPY (select * from foo) TO '/tmp/foo.csv' (FORMAT csv)"

* 別サーバから繋ぐ [#pabdd5cb]
''/var/lib/pgsql/9.6/data/postgresql.conf''
 listen_addresses = 'localhost,【自分のIPアドレス】'

''/var/lib/pgsql/9.6/data/pg_hba.conf''
 host    all             all             【アクセス元】/32        password

 createuser -U postgres 【ユーザ名】
 psql -U postgres -c "alter role 【ユーザ名】 with password '【パスワード】';"

通信路は暗号化した方が良い
 http://shinsuke789.hatenablog.jp/entry/2017/10/17/100000

* psql cygwin [#zc63e7ba]
 wget https://ftp.postgresql.org/pub/source/v9.6.3/postgresql-9.6.3.tar.gz

 wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz
 tar xzfp postgres*tar.gz
 cd postgres*
 ./configure --enable-nls --enable-thread-safety
 cd src/bin
 make; make install


* sql snipet [#mf3aa546]
*** timestamp から時間を取得 [#j35f4691]
 extract(hour from datetime)