PostgreSQL の数値データ型と 10 進数データ型を区別する

David Mbochi Njonge 2023年6月20日
  1. PostgreSQL のデータ型
  2. PostgreSQL へのログイン
  3. PostgreSQL で NUMERIC データ型を使用する
  4. PostgreSQL で DECIMAL データ型を使用する
  5. まとめ
PostgreSQL の数値データ型と 10 進数データ型を区別する

このチュートリアルでは、PostgreSQL データベースの数値データ型と小数データ型の違いについて読者をガイドします。

PostgreSQL のデータ型

PostgreSQL データベースには、integerbigintdecimalnumericcharacter Variouscharactertext など、テキストから数値までの範囲の多くのデータ型があります。

これらのデータ型は、アプリケーションのデータを保存するのに役立ちます。 選択するデータ型は、ストレージ要件と全体的なアプリケーション パフォーマンスによって異なります。 たとえば、bigint データ型は、integer データ型がデータのストレージ要件を満たさない場合に使用されます。

人の年齢など、小数部分を持たないデータを扱う場合は、integer など、スケール部分を持たないデータ型を使用することをお勧めします。 商品の価格など、小数部分を持つデータを扱う場合は、≪数値≫や≪小数≫など、目盛り部分を持つデータ型を使用することをお勧めします。

このチュートリアルでは、NUMERIC および DECIMAL データ型を使用して金額を表す方法を学習します。

PostgreSQL へのログイン

PostgreSQL データベースにログインするには、新しいターミナル ウィンドウを開き、次のコマンドを使用してローカル PostgreSQL サーバーにログインします。

david@david-HP-ProBook-6470b:~$ psql -U 

キーボードの Enter ボタンを押します。パスワードが要求された場合は、データベースのインストール中に作成したパスワードを入力し、もう一度 Enter を押します。 パスワードが正しければ、以下に示すように、ターミナル ウィンドウが postgres データベースに接続されているはずです。

david@david-HP-ProBook-6470b:~$ psql -U postgres
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# 

PostgreSQL で NUMERIC データ型を使用する

これら 2つの数値型がどのように異なるかを理解するために、例ごとに個別のデータベースを使用します。 次の SQL コマンドを使用して、numeric_db という名前のデータベースを作成します。

numeric_vs_decimal=# create database numeric_db;
CREATE DATABASE

CREATE DATABASE は、データベースが正常に作成されたことを示しています。 データベースに接続するには、次のコマンドを使用するだけです。

numeric_vs_decimal=# \c numeric_db;
You are now connected to database "numeric_db" as user "postgres".
numeric_db=#

上記のコードに示すように、ターミナル ウィンドウは numeric_db に接続されているはずです。

次の SQL コマンドをターミナルにコピー アンド ペーストして、主キー id と属性 productName および productPrice を持つ product という名前のテーブルを作成します。

numeric_db=# create table product(
numeric_db(# id SERIAL NOT NULL UNIQUE,
numeric_db(# productName VARCHAR(100),
numeric_db(# productPrice NUMERIC(6,4));
CREATE TABLE

CREATE TABLE は、テーブルが作成されたことを示しています。 productNameVARCHAR 型であり、productPriceNUMERIC 型であることに注意してください。

productPrice データ型の宣言で引数 64 を渡したことに注意してください。 パラメータは、それぞれデータの精度とスケールに関する情報を提供します。

精度は小数点の両側の合計桁数を指し、位取りは小数部の桁数を指します。 お金を扱うときは、スケールを定義して、大きな小数値が必要なスケールに強制されるようにすることが重要です。

これを実際に確認するには、次の SQL コマンドを使用して、いくつかの値を product テーブルに挿入します。

numeric_db=# insert into product(productName,productPrice)
numeric_db-# values ('Iphone 13 Pro',25.48678),
numeric_db-# ('Samsung galaxy a53',15.5476);
INSERT 0 2

INSERT は、値が正常に挿入されたことを示しています。 2つの数値データ型のうち、最初の型の精度は 7 であり、精度 6 に違反していることに注意してください。

4 のスケールを指定したため、値は設定した正確なスケールに強制されます。 次の SQL コマンドを使用して、テーブルに挿入された値を確認します。

numeric_db=# select * from product;
 id |    productname     | productprice 
----+--------------------+--------------
  1 | Iphone 13 Pro      |      25.4868
  2 | Samsung galaxy a53 |      15.5476
(2 rows)

PostgreSQL で DECIMAL データ型を使用する

この例では、decimal_db という名前のデータベースを使用します。 前の例で使用したコマンドを使用して、このデータベースを作成します。

データベースを作成したら、データベースに接続し、次の SQL コマンドを使用して、id という名前の主キーと属性 productName および productPrice を持つ product という名前のテーブルを作成します。

decimal_db=# create table product(
decimal_db(# id SERIAL NOT NULL UNIQUE,
decimal_db(# productName VARCHAR(100),
decimal_db(# productPrice DECIMAL(6,4));
CREATE TABLE

この表は、前の例の表と似ていることに注意してください。 行った唯一の変更は、productPrice データ型を NUMERIC から DECIMAL に変換することです。

次の SQL コマンドを使用して、いくつかの値を製品テーブルに挿入します。 前の例に見られるように、スケールは、値が指定した正確なスケールに強制されることを保証します。

decimal_db=# INSERT INTO product(productName, productPrice)
decimal_db-# VALUES ('IPhone 13 Pro',25.48678),
decimal_db-# ('Samsung galaxy a53',14.5476);
INSERT 0 2

INSERT ステートメントは前の例のものと同じであり、変更は加えられていません。 INSERT ステートメントが期待どおりに機能したことを確認するには、次の SQL コマンドを使用して、テーブルに挿入された値を表示します。

decimal_db=# select * from product;
 id |    productname     | productprice 
----+--------------------+--------------
  1 | IPhone 13 Pro      |      25.4868
  2 | Samsung galaxy a53 |      14.5476
(2 rows)

まとめ

このチュートリアルでは、PostgreSQL で NUMERIC および DECIMAL データ型を使用する方法を学びました。 これは、金銭的価値を扱うときに重要です。

これらの例は、2つのデータ型に違いがなく、同じ意味で使用できることを示しています。 NUMERIC または DECIMAL は同じ効果があるため、リーダーは自由に使用する必要があります。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub