PostgreSQL の数値データ型と 10 進数データ型を区別する
- PostgreSQL のデータ型
- PostgreSQL へのログイン
-
PostgreSQL で
NUMERIC
データ型を使用する -
PostgreSQL で
DECIMAL
データ型を使用する - まとめ
このチュートリアルでは、PostgreSQL データベースの数値データ型と小数データ型の違いについて読者をガイドします。
PostgreSQL のデータ型
PostgreSQL データベースには、integer
、bigint
、decimal
、numeric
、character Various
、character
、text
など、テキストから数値までの範囲の多くのデータ型があります。
これらのデータ型は、アプリケーションのデータを保存するのに役立ちます。 選択するデータ型は、ストレージ要件と全体的なアプリケーション パフォーマンスによって異なります。 たとえば、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
は、テーブルが作成されたことを示しています。 productName
は VARCHAR
型であり、productPrice
は NUMERIC
型であることに注意してください。
productPrice
データ型の宣言で引数 6
と 4
を渡したことに注意してください。 パラメータは、それぞれデータの精度とスケールに関する情報を提供します。
精度は小数点の両側の合計桁数を指し、位取りは小数部の桁数を指します。 お金を扱うときは、スケールを定義して、大きな小数値が必要なスケールに強制されるようにすることが重要です。
これを実際に確認するには、次の 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 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