[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 メーリングリストの案内