カテゴリー別アーカイブ: Postgresql

PostgreSQLで to_char()すると前に半角スペースが入る


手元にあった環境、PostgreSQL 9.1 と 9.3 で確認しました。

to_char()すると前に半角スペースが入る

PostgreSQLで to_charすると先頭になんか知らないけど、半角スペースが1つはいってしまう。

select  to_char(id, '00000')
⇒ ' 00030'

ドキュメントを読んでみると

https://www.postgresql.jp/document/9.1/html/functions-formatting.html

修飾子 説明
FM添え字 字詰めモード(空白パディングの無効、および0の除去) FM9999
TH添え字 大文字による序数添え字 999TH
th添え字 子文字による序数添え字 999th

と言うのがあったので、以下の様にしたら無事解決

select  to_char(id, 'FM00000')
⇒ '00030'


PostgreSQLでの一部のデータのみを移行する方法


開発環境やステージング環境で本番と同様のデータを入れてテストをすることがありますが、また一から本番にそのデータを
入れるのが面倒なので、データは正常なので、そのままデータを移行する方法。

データベース全体や、テーブル全体なら、pg_dumpでダンプして流し込めば簡単にできますが、
今回は一部のデータなので、使えません。

とりあえず吐き出したりして、INSERT文とか書くなんて数が多いと面倒すぎてやってられないので、
こんな時は、 COPY 文の query を使えば簡単に出来ます。

COPY  (SELECT * FROM sample_table WHERE id between 100 AND 200 ) 
TO '/tmp/copy_data'; 

のようなSQLを実行すると /tmp/copy_data に 条件に合ったデータが出力されるので、
出力されたファイルにviとかのエディターで

ファイルの行頭に

COPY “sample_table” FROM stdin;

行末に

\.

(バックスラッシュドット)を追記します。

そのファイルを移行先のサーバに転送して、

psql sample_database < /tmp/copy_data

を実行すれば完了です。