takafumi blog

日々の勉強メモ

PostgreSQL、MySQLの補完機能の違い

環境   CentOS6.6 MySQL5.6 PostgreSQL9.3

補完についてメモ。

MySQLにはデフォルトではSQLの補完機能がない。
PostgreSQLだとデフォルトでTAB補完が可能なため結構不便に感じる。

MySQLで補完機能を使う方法は2つ。

1) mysqlコマンド実行時にオプションを付けて実行

$ mysql --auto-rehash

または、

2) my.cnfに記載する

auto-rehash

の一文を追加。

しかし、PostgreSQLと比べると以下の点が劣る。

a) 大文字、小文字を厳密判断で補完。

つまりSELECTを以下のように小文字で入力すると

mysql> selec 

TABを押しても補完されない。
確かに制御文は大文字で書くことが推奨されるが、小文字で書き始めたときでも補完してくれるPostgreSQLと比べるとやや残念な感じがする。
ただPostgreSQLは基本、大文字・小文字を区別しないので、そのあたりが関係しているのかもしれない。
PostgreSQLも引用符で囲むと大文字・小文字を区別する。

b) 文法を考慮しない。

例えば、FROMの後にt1というテーブルを補完したいとき、tだけ打ち補完すると、

mysql> SELECT * FROM t
t1         t1.comment t1.dep     t1.id      t1.memo    t1.name    tee        test

とテーブル以外のカラムやコマンド、DBまで補完の候補に上がる。
同様にPostgreSQLで行うと

psql> SELECT * FROM t
t1  t2

とテーブルだけ候補に挙がる。

他に例えば

mysql> CREATE S -- <TAB>で補完
SAVEPOINT           SESSION_USER        SNAPSHOT            SQL_THREAD          START               SUBDATE
・・・
SELECT              Sid                 SPECIFIC            SQL_TSI_WEEK        STDDEV_SAMP         SUPER
SELECTtables        SIGN                SQL                 SQL_TSI_YEAR        STOP                SUSPEND
・・・
SESSION             SMALLINT            SQL_SMALL_RESULT    SSL                 STRIPED


psql> CREATE S -- <TAB>で補完
SCHEMA    SEQUENCE  SERVER

のようにMySQLは文法的に使えない構文や、テーブルも候補に挙げる