Postgresqlで重複レコードを削除する

DISTINCT句によって検索結果がユニークになることを利用し、結果を別テーブルにコピーして戻す。

※制約(プライマリキー制約、 非NULL制約など)やデフォルト値などの設定は、自動的にコピーされないので適宜再設定する。

 

 

PostgresqlでSQL文中に改行コードを挿入する

改行(LF)したい箇所にchr(10)を挿入する。

ASCIIコード参考。

ASCIIコード内容
chr(9)タブ
chr(13)CR
chr(10)LF
chr(32)スペース
chr(39)引用符(')

 

また、文字列の前にE(小文字でもOK)を入力することでも改行コードを挿入できる。

 

PostgresqlでコマンドラインからCSV出力

COPYコマンドを利用するパターン

単純なCOPYコマンド

列指定のCOPYコマンド

SELECT結果のCOPYコマンド

※オプション
FORMAT:読み取りまたは書き込みに使用するデータ書式を選択(text、csv(カンマ区切り値)、またはbinary、デフォルトはtext)
DELIMITER:フィールド区切り文字の指定(書式でのデフォルトはタブ文字、CSV書式ではカンマ)

出力結果を復元するにはCOPY…FROM

 

psqlコマンドを利用するパターン

SQLを記述してエクスポート

※オプション
-A:位置揃えなしの出力モードに切り替える(デフォルトの出力モードは位置揃えあり)
-F:位置揃えを行わない出力におけるフィールド区切り文字の指定(後続の文字を区切り文字とする、デフォルトは ASCII の縦棒”|”)
-t:列名と結果の行数フッタなどの表示を無効にする

SQLファイルを指定してエクスポート

メタコマンドを利用してエクスポート

PostgresqlでNVL(NULL置換)

Postgresqlでは、OracleやInformix等でNULL置換を行うNVL関数が存在しない。

代わりにCOALESCE(コアレス)関数が用意されている。

使い方というよりは綴りを忘れてしまうのでメモ。

なお、正確にはNVL関数は「該当する値がNULLの場合の代替値を返す」仕様に対して、CALESCEは「NULLでない自身の最初の引数を返す」仕様であり引数を列挙することができる。

上記の場合は、target_col1がNULLならtarget_col2、それもNULLならtarget_col3。それでもNULLなら” “、といった「IF-ELSE構文」のような挙動をする。

 

Postgresqlで接続先を動的変更できるDBLINKのサンプル

DBLINKの基本的な構文例。

接続先を動的に変更する為、接続先情報をテーブルで管理する。

接続先情報を取得する為のPL/pgSQLを定義。

接続先情報取得関数の利用方法。

接続先情報取得関数を利用したDBLINKを行うVIEWの定義。

接続先情報取得関数を利用したDBLINKを行うVIEWの参照。