カテゴリー別アーカイブ: DB Tips

導出した項目に条件付きで連番を振る – PostgreSQL

表を結合し条件付きで連番を振る・・・
なんてことができることを最近知りました。
row_number()という便利な関数があるようです。
こちらのサイトが大変参考になります。
PARTITION句というものを使い、
WHERE句のように条件を指定してあげることで
条件に沿ったもののみで連番をつけて結果を得ることができます。

postgresにTSVファイルからデータをインポートする場合の注意

仕事でちょっとハマったのでメモ。
TSVファイルをpostgresに読み込ませたかったんだけど、
これがなかなかうまくいかなかった。
準備として以下の2点。
・postgresにはあらかじめテーブルを用意しておく。
・TSVファイルのデータはテーブル定義に合う形で用意する。
ここまでやったらpostgresにログインしてcopyコマンドを使い読み込ませるんだけど、
ここで謎のsyntax err
私の場合、
invalid input syntax for integer
ってのが出ました。
 
いったい何を言っているんだ。
 
データとテーブル定義を見直してみたけど型に食い違いは無い。
色々調べてみたけど原因がわからず。
TSVデータはもともとExcelでデータを作成し、
それをVBAを使って吐き出したものなのですが
この時に単純にUTF-8を文字コードに指定していました。
textTsv.Charset = “UTF-8″
こんな感じで。
この時どうやらVBAで文字コードをUTF-8にすると、
BOM付きのデータが生成されるようです。
 
まあこれが問題だったようで、
TSVファイルをpostersに読み込ませるときにBOMの情報まで読もうとしているがためにsyntax errが発生するようです。
対策としては単純にエディタで開いてBOMを消す、
もしくはBOMをつけないようにVBAを改変するなど。
プログラムを編集する場合は
こちらが大変参考になりました。

postgres WITHOUT OIDS とは?

postgresでのデータベースの実装を任され、CREATE TABLE 文を作成していく際にわからない部分が出てきたのでメモ。

[オプション] WITHOUT OIDS;

このオプションを指定せずにテーブルを作成すると、OIDという列が自動的に挿入される。
このOIDはpostgresの内部でいろんなテーブルのPRIMARY KEYとして利用される。
そんなに長いデータ型ではないようなので大規模なシステムには不向き。

つまり大規模なシステムのデータベースを実装する場合は、このオプションを利用しいらん列が挿入されるのを防ぎましょうということ。
PRIMARY KEYは別に設定して実装する方が良さそう。