PostgreSQL

PostgreSQL 文字列操作

quote_ident() 

地味ですが有り難い関数です。たまに環境によっては、テーブル名やカラム名をダブルクォーテーションで囲まないとならない場合があります。例えば以下のようにテーブル名に日本語を使うようなケースです。このような時、information_schema.columnsや、pg_tablesを使って動的SQLを作成する場合重宝します。

-- 以下テーブルを作成します。
create table sooni."社員表" (
  "社員番号" character varying(10)
 ,"社員名"   character varying(10)
 ,mobile     character VARYING(11)
);

--
-- 普通にテーブル名を参照するとこんな感じ
--
myposdb=# select schemaname,tablename
myposdb-# from pg_tables t where t.tablename='社員表';
 schemaname | tablename
------------+-----------
 sooni      | 社員表
(1 行)


--
-- quote_ident()を使うとこんな感じ
--
myposdb=# select schemaname,quote_ident(tablename) tablename
myposdb-# from pg_tables t where t.tablename='社員表';
 schemaname | tablename
------------+-----------
 sooni      | "社員表"
(1 行)


--
-- 普通にカラム名を参照するとこんな感じ
--
myposdb=# select dtd_identifier,column_name,data_type
myposdb-# from information_schema.columns
myposdb-# where table_name='社員表';
 dtd_identifier | column_name |     data_type
----------------+-------------+-------------------
 1              | 社員番号    | character varying
 2              | 社員名      | character varying
 3              | mobile      | character varying
(3 行)


--
-- quote_ident()を使うとこんな感じ
-- 必要な場合のみダブルクォーテーションで囲んでくれるのがうれしい
--
myposdb=# select dtd_identifier,quote_ident(column_name) column_name,data_type
myposdb-# from information_schema.columns
myposdb-# where table_name='社員表';
 dtd_identifier | column_name |     data_type
----------------+-------------+-------------------
 1              | "社員番号"  | character varying
 2              | "社員名"    | character varying
 3              | mobile      | character varying
(3 行)


myposdb=#
スポンサーリンク