

こんにちは、さっそくですが質問させていただきます。  
とあるテーブルのindexを貼り直しているのですが

[code]

    "table_name_login_idx" btree (login) WHERE sex = 'm'::bpchar
    
[/code]

とありますが、この`::bpchar`ってどういうことでしょうか？  
sexはcharacter(1)です。

ご指導お願いします。


CC BY-SA 4.0
2019-03-18T02:53:44.213
53510
2019-03-19T06:53:24.627
2019-03-18T03:56:54.850
19110
20350
question
postgresql
postgresqlの「::bpchar」について


PostgreSQL において、コロン2つ `::` は型のキャストを表します。つまりここでは `'m'` を `bpchar` 型にキャストしています。

`bpchar` 型とは "blank-padded char" を表す型で、`character(n)` の内部的な名前です。`varchar(n)` や
`text` とは[別の型](https://www.postgresql.org/docs/current/datatype-
character.html)です。

この型キャストがないと `'m'` の型が一旦
[`unknown`](https://www.postgresql.org/docs/current/datatype-pseudo.html)
として解釈されてしまうので、明示的に型キャストしているのでしょう。

参考

  * [PostgreSQL Documentation 4.2.9 Type Casts](https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS)
  * [Why char datatype is converted to bpchar automatically?](https://stackoverflow.com/q/51421269/5989200)


CC BY-SA 4.0
2019-03-18T04:05:41.787
53513
2019-03-19T06:53:24.627
2019-03-19T06:53:24.627
19110
19110
53510
answer