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

SAKAIDA sakaida @ psn.ne.jp
2014年 9月 3日 (水) 13:34:11 JST


石井さん

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

元々、ユーザ名にハイフォンを付けなければよいのですが、いき
ががり上、仕方がないケースもありまして・・。

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



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