システム開発ブログ

ソフトウエア開発部

データベース

PostgreSQLのテーブル定義を利用したCSV取り込み

PostgreSQL + PHPのWebシステムで、
マスタメンテナンス系のテーブルのCSV取り込みを実装する必要がありました。

その際に、PostgreSQLのテーブル定義を参照し、項目の型によって、
入力チェックを行うよう実装しました。

下記のSQLを実行すれば、定義が取得できるので、
あとは、PG上からチェックを行うだけです。

SELECT pg_attribute.attname			--項目名
     , pg_type.typname				--型
     , pg_attribute.atttypmod - 4	--varchar用項目長取得(※)
  FROM pg_class, pg_attribute, pg_type
 WHERE pg_class.oid = pg_attribute.attrelid
   AND pg_attribute.atttypid = pg_type.oid
   AND pg_class.relname = [テーブル名]
   AND pg_attribute.attnum > 0
 ORDER BY pg_attribute.attnum

※pg_attribute.atttypmod を - 4 しているのは、
 管理用の情報が、データ中に一緒に入っている為です。
 また、pg_attribute.atttypmod は、
 型によって取得方法を変更する必要があります。
 上記は[varchar]の場合の取得方法です。
 

今回は小規模なシステムで、特殊なチェックが必要なかったので、
型が[varchar]であれば、取得した項目長分の桁数入力チェックを、
[int4]であれば、数値チェックを掛けるよう実装しました。

その他、必須チェックやCSVファイル内の項目数チェックは、
PG上から行う必要がありますが、
テーブルに依存するチェックは、テーブル定義を参照して行えば、
簡単に共通化することができますので、試してみてください。

システム周りのお悩みを解決します

まずは無料ダウンロード

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ