34537

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています

なし 34537

msg# 1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2020-1-7 8:56
KETNO  半人前   投稿数: 9
◼️問題
連番型についての説明として、間違っているものはどれか。
◼️選択肢
SERIAL・BIGSERIAL型にはNULLを挿入できない
○SERIAL型に-10を挿入するとエラーとなる
連番型のカラムを作成すると、シーケンスは正の値をとる
SERIAL・BIGSERIAL型にはユーザがデータ型の範囲内で任意の値を設定できる
SERIAL・BIGSERIAL型のカラムを作成すると、シーケンスも同時に作成される

◼️質問
シリアル型は、マニュアルだとマイナス値が入らないように読み取れますが、エラーにならないのでしょうか。
実機では試してません。
あと、以下選択肢も意味を理解できません。

SERIAL・BIGSERIAL型にはユーザがデータ型の範囲内で任意の値を設定できる

なし Re: 34537

msg# 1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-1-7 11:46
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
◼️質問
シリアル型は、マニュアルだとマイナス値が入らないように読み取れますが、エラーにならないのでしょうか。
実機では試してません。
PostgreSQLはWindows版もあるので、実機確認したほうが理解が早いですよ。
また、可能なら「マニュアルから読み取れたのであればそのマニュアルの提示」もあると話が早いです。

以下の通りやってみました。インラインで補足しています。
$ psql -U postgres template1
psql (12rc1)
Type "help" for help.

※serial型、bigserial型の列を持つテーブルを作成
template1=# create temp table tmp_34537 (
template1(# test_serial serial,
template1(# test_bigserial bigserial);
CREATE TABLE
template1=# \dt tmp_34537
            List of relations
  Schema   |   Name    | Type  |  Owner
-----------+-----------+-------+----------
 pg_temp_3 | tmp_34537 | table | postgres
(1 row)

※内部的にはinteger型、bigint型。だが勝手にシーケンスが割り当てられているようだ
template1=# \d tmp_34537
                                     Table "pg_temp_3.tmp_34537"
     Column     |  Type   | Collation | Nullable |                      Default
----------------+---------+-----------+----------+---------------------------------------------------
 test_serial    | integer |           | not null | nextval('tmp_34537_test_serial_seq'::regclass)
 test_bigserial | bigint  |           | not null | nextval('tmp_34537_test_bigserial_seq'::regclass)

※シーケンスの存在を確認
template1=# \ds
                       List of relations
  Schema   |             Name             |   Type   |  Owner
-----------+------------------------------+----------+----------
 pg_temp_3 | tmp_34537_test_bigserial_seq | sequence | postgres
 pg_temp_3 | tmp_34537_test_serial_seq    | sequence | postgres
(2 rows)

※設問の通り「-10」はINSERTできる
template1=# insert into tmp_34537 values (-10, -10);
INSERT 0 1
template1=# select * from tmp_34537;
 test_serial | test_bigserial
-------------+----------------
         -10 |            -10
(1 row)

それと
引用:
あと、以下選択肢も意味を理解できません。

SERIAL・BIGSERIAL型にはユーザがデータ型の範囲内で任意の値を設定できる
SERIAL、BIGSERIALは解説の表にもある通り
SERIAL: -2147483648から2147483647
BIGSERIAL: -9223372036854775808から9223372036854775808
という範囲の値を扱えるので、その範囲内なら好きな値を設定(INSERT、UPDATE)できるという意味だと思いますが、どうでしょうか?

なし Re: 34537

msg# 1.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-1-7 13:26
KETNO  半人前   投稿数: 9
ご回答ありがとうございます。よく理解できました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.