[pgsql-jp: 35446] Re: pgAdminIIIでテーブル定義すると動作がおかしい

ISHIDA Akio iakio @ mono-space.net
2005年 5月 31日 (火) 22:06:04 JST


こんにちは。石田@苫小牧市です。

masato.sakaguchi @ nifty.com wrote:
>  こんにちは、坂口です。
>  藤沢さん、金井さん、ありがとうございます。
> 
>  金井さんの指摘された件で謎がとけました。
> 
> 
>> pgAdminIIIは、オブジェクト名に半角小文字以外を指定すると、
>>自動でダブルクォーテーションを付加したDDLを生成するようです。
> 
> 
>  pgAdminIIIの仕様が原因なのですね。

というわけでもありません。
まず元々の現象[pgsql-jp: 35442]

>  たとえばCSEからtblTestというテーブルを見るときには以下のようになります。
>  成功  SELECT * FROM "tblTest";
>  失敗  SELECT * FROM  tblTest;

これは、ダブルクォートで囲まれていない識別子(テーブル名など)は
すべて小文字として扱われるためです。

http://www.postgresql.jp/document/current/html/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS

上記URLにある通り、すべて小文字にするのは標準SQL準拠では
ありませんが、ダブルクォートされていない識別子は
大文字小文字同一視するという意味では標準に準拠しています。

pgAdminIIIがもしダブルクォートを付加しなければ、
tblTestというテーブルを作ったつもりでもtbltest (すべて小文字)が
作成されます。結果として
SELECT * FROM  tblTest; は成功し、
SELECT * FROM "tblTest"; は失敗するでしょう。これは意図した
動作ではないと思います。

>  習慣でtblAdress、qryKanaOrderというようなルールでオブジェクトに名前付
> けしていました。
>  ただ不可解なのはAccess2000にリンクしテーブルの一覧で見たときや、CSEの
> オブジェクト一覧では「"」が見えないことです。
>  特にAccess2000では、そのままリンクテーブルに読み書きできました。
>  pgAdminの使い方を調べてみたのですが、この「"」を付加することを抑止する
> 方法が見つかりません。
>  この「"」というのは、なにか根拠があって付けられているものなのでしょう
> か?
>  特に理由がないものなら、抑止できないかなぁ、と思います。
> 
> masato.sakaguchi @ nifty.com 坂口真人
> 
> 
> 




pgsql-jp メーリングリストの案内