助け合いフォーラム

OSS-DB

OSS-DB Silver(Ver2.0)
問題ID : 12180
問題を開く
デフォルト値が10で、10以上の数字のみを格納できるデータ型を作成したい。 以下のSQL文のうち、適切なものはどれか。

この問題はプレミアムコンテンツです。

上に戻る

デフォルト設定について

公開日 2022/06/20

ドメイン作成時のデフォルト設定とテーブル作成時のデフォルト設定は併用可でしょうか。
具体的には以下のSQL文の例が考えられると思います。

CREATE DOMAIN original_type AS integer DEFAULT 10
CREATE TABLE test(id original_type DEFAULT 5 ....

もし併用が可能ならば、デフォルト設定のルール(例:ドメイン作成の方が優先、
最新の設定や変更で上書き)を教えてください。

2022/06/20 13:25

さて、問題ID:12180そのものに関する質問ではないのでどうコメントするか悩ましいところですが。

とりあえずやってみたらいいんじゃないですか?

CREATE DOMAIN original_type AS integer DEFAULT 10
CREATE TABLE test(id original_type DEFAULT 5 ....

手元にdockerイメージでPostgreSQL環境作って投げてみましたけど、gzx01277さんのSQLはそのまま通ったっぽいですよ。
(dockerじゃなくkubernetesでやってるのでコマンドラインとかちょっと違いますけど本質はそこではないので)

% kubectl run postgres --image=postgres --env=POSTGRES_PASSWORD=postgres --env=POSTGRES_USER=postgres
pod/postgres created
% kubectl exec postgres -it -- psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.

postgres=# CREATE DOMAIN original_type AS integer DEFAULT 10;
CREATE DOMAIN
postgres=# create table test (id original_type DEFAULT 5);
CREATE TABLE
postgres=# \dt
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | test | table | postgres
(1 row)

postgres=# \d test
                   Table "public.test"
 Column |     Type      | Collation | Nullable | Default
--------+---------------+-----------+----------+---------
 id     | original_type |           |          | 5

postgres=# \dD
                              List of domains
 Schema |     Name      |  Type   | Collation | Nullable | Default | Check
--------+---------------+---------+-----------+----------+---------+-------
 public | original_type | integer |           |          | 10      |
(1 row)

postgres=#

もし併用が可能ならば、デフォルト設定のルール(例:ドメイン作成の方が優先、
最新の設定や変更で上書き)を教えてください。

そう言った話は、公式ドキュメントをもとに調べてみたりネットで検証してる人の記事なりを探してみてはどうでしょうか?
もしくはご自身で検証して、その情報を公開されると同様の疑問を持つ方への良い貢献になると思いますよ!


コメント

g gzx01277

2022/06/20 18:17

早速のご教示をありがとうございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?