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

Tatsuo Ishii ishii @ sraoss.co.jp
2014年 9月 3日 (水) 14:41:09 JST


境田さん

石井です。

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
> 


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