1. ホーム
  2. postgresql

[解決済み] なぜPostgreSQLでは符号なし整数が使えないのですか?

2022-05-09 05:39:08

質問

この投稿に出会いました( MySQLにおけるtinyint、smallint、mediumint、bigint、intの違いは何ですか? で、PostgreSQLが符号なし整数をサポートしていないことに気がつきました。

なぜそうなるのか、どなたか教えてください。

ほとんどの場合、私はMySQLのオートインクリメント主キーとして符号なし整数を使用しています。このような設計の場合、データベースをMySQLからPostgreSQLに移植する際に、どのようにしてこれを克服することができますか?

ありがとうございます。

解決方法は?

postgresql に符号なし型がない理由はすでに説明されています。しかし、私は符号なし型にドメインを使用することをお勧めします。

http://www.postgresql.org/docs/9.4/static/sql-createdomain.html

 CREATE DOMAIN name [ AS ] data_type
    [ COLLATE collation ]
    [ DEFAULT expression ]
    [ constraint [ ... ] ]
 where constraint is:
 [ CONSTRAINT constraint_name ]
 { NOT NULL | NULL | CHECK (expression) }

ドメインは型に似ていますが、制約が追加されています。

具体的な例としては、以下のようなものがあります。

CREATE DOMAIN uint2 AS int4
   CHECK(VALUE >= 0 AND VALUE < 65536);

この型を悪用しようとしたときのpsqlの結果は以下のとおりです。

<ブロッククオート

DS1=# select (346346 :: uint2);

ERROR: ドメイン uint2 の値はチェック制約 "uint2_check" に違反します。