[pgsql-jp: 41724] Re: ユーザ名のダブルクォート

SAKAIDA sakaida @ psn.ne.jp
2014年 9月 3日 (水) 15:59:36 JST


石井さん

回答ありがとうございます。
境田です。

SQL92がそもそも古過ぎるということですね。了解しました。

SQL Server、Sybase、SQLiteの <delimited identifier> は、
ダブルクォートで囲むかもしくは 鍵かっこ [ ] で囲むよう
です。

可能ならば、PostgreSQLも [ ] に対応していだければ、あり
がたいですが・・。


On Wed, 03 Sep 2014 14:41:09 +0900 (JST)
Tatsuo Ishii <ishii @ sraoss.co.jp> さん wrote:

> 境田さん
> 
> 石井です。
> 
> http://wiki.postgresql.org/wiki/Developer_FAQ
> で紹介されている
> SQL:2003 http://www.wiscorp.com/sql_2003_standard.zip 
>> 5WD-02-Foundation-2003-09.pdf
> の152ページあたりをみると、
> 
> <role name> ::= <identifier>
> 
> <identifier> ::= <actual identifier>
> <actual identifier> ::=
> 
> <regular identifier>
> | <delimited identifier>
> | <Unicode delimited identifier>
> 
> ということで、リテラルは含まれないようです。
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> English: http://www.sraoss.co.jp/index_en.php
> Japanese:http://www.sraoss.co.jp
> 
> > 石井さん
> > 
> > 回答ありがとうございます。
> > 境田です。
> > 
> > 元々、ユーザ名にハイフォンを付けなければよいのですが、いき
> > ががり上、仕方がないケースもありまして・・。
> > 
> > MySQLが、ユーザ名をシングルクォートで囲みますので、PostgreSQL
> > もなんとかならないかな〜と願ったのですが・・。
> > 
> > 
> > 次の本が正しいかどうかは知りませんが、「SQL92完全ガイド」
> > (トッパン)の"SQL-92言語仕様"によりますと、user name の定義は
> > 次です。
> > 
> > <user name>::= <simple value specification>
> > <simple value specificatin> ::= <parameter name>|
> >                                 <embedded value name> |
> >                                 <literal>
> > 
> > <literal> はダブルクォートもしくはシングルクォートを使用する
> > のが一般的です。
> > 
> > PostgreSQLは内部で、user name が識別子扱いでないとまずいとこと
> > が有るのだろうと思いますが、構文解析の部分だけを見れば、シング
> > ルクォートの中に識別子を指定する新しい specification を作成でき
> > るのではないかと推測しています。
> > 
> > 
> > On Wed, 03 Sep 2014 11:57:02 +0900 (JST)
> > Tatsuo Ishii <ishii @ sraoss.co.jp> さん wrote:
> > 
> >> 境田さん
> >> 
> >> 石井です。
> >> 
> >> SQLの規格では、ユーザ名は識別子扱いで、シングルクォートで囲むとリテラル
> >> になってしまうので、難しいと思います。
> >> --
> >> Tatsuo Ishii
> >> SRA OSS, Inc. Japan
> >> English: http://www.sraoss.co.jp/index_en.php
> >> Japanese:http://www.sraoss.co.jp
> >> 
> >> > 境田と申します。
> >> > 
> >> > しばらくPostgreSQLから離れていましたので、初歩的な質問で
> >> > 恐縮です。
> >> > 
> >> > 現在、PostgreSQL 8.4.20 を使用しています。ハイフォン付の
> >> > ユーザ名のパスワード変更は次のようにダブルクォートで囲む
> >> > 必要があります。
> >> > 
> >> > alter role "xxx-xxx" with password 'yyyyyyyy';
> >> > 
> >> > しかし、alte文全体をダブルクォートで囲む必要がある場合、
> >> > ユーザ名をシングルクォートで囲むことができれば便利です。
> >> > 
> >> > 「ユーザ名をシングルクォートで囲む文法」を許さないという
> >> > 理由はあるのでしょうか?
> >> > 
> >> > 可能ならば、PostgreSQLのバージョンアップ項目に追加してい
> >> > ただきたいな〜と思っています。
> >> > 
> >> > ※ ユーザ名をシングルクォートで囲みたいという例
> >> > 
> >> >    bashスクリプト内で、expectを使用してpsqlの自動化を行う
> >> >    場合などです。
> >> > 
> >> >   (一部抜粋)
> >> >    expect -c "
> >> >      set timeout 5
> >> >      spawn su - $pgsql
> >> >      send \"psql\n\"
> >> >      expect \"パスワード:\"
> >> >      send \"$passwd\n\"
> >> >      expect \"$pgsql=# \"
> >> >      send \"alter role $userid with password '$passwd';\n\"
> >> >      send \"\\\q\n\"
> >> >      send \"exit\n\"
> >> >      interact
> >> >    "
> >> > 
> >> > --
> >> > SAKAIDA Masaaki
> >> > 
> > 
> > --
> > SAKAIDA Masaaki
> > 

--
SAKAIDA Masaaki



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