Yukiです。
年末年始の休暇に入りました。お仕事の方はお疲れ様です。お休みの方も年の瀬で忙しくお過ごしでしょうか?
今日は、データ型について勉強しました。データ型について、PostgreSQLにはこんなのがあるんだと驚いたところを挙げていきたいと思います。
データ型
text型
可変長の文字列を格納します。
varcharで文字数の(n)を省略した場合も同じです。
charやvarcharで、(n)がバイト数ではなく文字数なのもポイントですね。
型の使い分けについては、Let’s POSTGRESの下記の記事が参考になります。
Let’s POSTGRES
boolean型
真偽値(論理値)を格納するための型です。
TRUEとFALSEだけでなく、NULLとすることもできます。
なんと容量を1ビットしか使いません。(当たり前か)
以下の文字列や値で設定することができます。
真の状態: ‘t’, ‘true’, ‘y’, ‘yes’, ‘on’, ‘1’, TRUE
偽の状態: ‘f’, ‘false’, ‘n’, ‘no’, ‘off’, ‘0’, FALSE
(大文字でも可能です)
serial型
連番用の型です。
使用するとシーケンスが自動で作られます。
1からの連番になります。
明示的に値を設定することもできますが、一意制約違反にならないように気をつけましょう。
OID型
PostgreSQL独自のデータ型です。
OIDは、テーブル、インデックス、関数などのオブジェクトに、データベースクラスタ内で一意に振られたIDです。pg_classなどシステムテーブルでよく使われます。隠し列になっているので、SELECTする際、明示的に指定する必要があります。
また、便利な技として、regclass型にキャストするとテーブル名やインデックス名をOIDに変換することができます。
WHERE oid = 'table1'::regclass
キャストについては後述します。
配列型
#RDBMSにあるまじき配列型が使えます。(Oracleも使えましたかね。)
#第1正規形が崩れちゃってるので、どうなんでしょうね。
#個人的には、あまり好きではないです。
他の型について、配列型をそれぞれ作成できます。
例)
CREATE TABLE table1( col1 char[], col2 text[], col3 int[], col4 timestamp[] );
キャスト
型変換です。
PostgreSQLでは、以下のように2つの書き方があります。
<値>::<データ型>
CAST(<値> AS <データ型>)
前者はPostgreSQL独自でしょうか。後者のほうは、標準SQLですね。Oracleでもできたかと。
例)
'1234'::float
CAST('1234' AS float)
ちょっとしたTipsですが、数値計算する前に、float型(double precision型、8バイト、可変精度浮動小数点)に変換するというものがあります。以下の例では、整数÷整数のときに小数部が切り捨てられてしまうのを防ぐことができます。気になった方は、キャストを外して実行してみてください。
SELECT 1234::float / 3 * 3;
まとめ
今日はデータ型について勉強しました。
PostgreSQL独自のものについては、よく覚えておく必要がありそうですね。
Photo by Geran de Klerk on Unsplash
コメント