質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

2166閲覧

PostgreSQL [MIN]、[MAX]とは

Hanbe.T

総合スコア36

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/07/12 16:04

関数の中で使用されている以下が何かわからず、困っています。
・[MIN]
・[MAX]

定義を見たわけではないので、もしかすると定義自体が間違っている可能性があるかもしれません。
お手数で教えていただけますでしょうか。

SQL

1DROP TRIGGER IF EXISTS TG20180712_01 ON T20180712_01; 2DROP FUNCTION IF EXISTS F20180712_01(); 3DROP TABLE IF EXISTS T20180712_03; 4DROP TABLE IF EXISTS T20180712_02; 5DROP TABLE IF EXISTS T20180712_01; 6 7CREATE TABLE T20180712_01( 8 num varchar(10) 9); 10 11CREATE TABLE T20180712_02( 12) INHERITS(T20180712_01); 13 14CREATE TABLE T20180712_03( 15) INHERITS(T20180712_01); 16 17CREATE FUNCTION F20180712_01() RETURNS TRIGGER AS $$ 18 BEGIN 19 IF ('[MIN]'<=NEW.num AND NEW.num<='[MAX]') THEN 20 INSERT INTO T20180712_02 VALUES(NEW.*); 21 ELSE 22 INSERT INTO T20180712_03 VALUES(NEW.*); 23 END IF; 24 RETURN NULL; 25 END; 26$$ LANGUAGE plpgsql; 27 28CREATE TRIGGER TG20180712_01 29 BEFORE INSERT ON T20180712_01 30 FOR EACH ROW EXECUTE PROCEDURE F20180712_01(); 31 32INSERT INTO T20180712_01 VALUES('1'); 33INSERT INTO T20180712_01 VALUES('3'); 34INSERT INTO T20180712_01 VALUES('2'); 35SELECT * FROM T20180712_01; 36SELECT * FROM T20180712_02; 37SELECT * FROM T20180712_03;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/07/13 01:02 編集

この SQL は、どのように実行しているのでしょうか? 手動で psql を使って実行ですか? プログラムで読み込んで実行ですか?
Hanbe.T

2018/07/13 14:11

上記は、再現するために用意したものですので、psqlで使用していただいて問題ありません。
guest

回答2

0

仕様なり、要求仕様を確認した方が良さそうな気がします。
元の作成者は範囲型 を使おうしてしているのでしょうか?

現状のSELECT結果も提示されては?

投稿2018/07/13 12:24

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/07/13 12:39

>範囲型 を使おうとしてしている []使っているからといっても、単項目なのでそれは無いと思います。
Orlofsky

2018/07/13 12:40

範囲型の使い方が間違っているのかと。
sazi

2018/07/13 12:41

範囲型なら<=とかではなく、演算子も別物ですから
Orlofsky

2018/07/13 12:44

数値型と文字列を比較しているくらいだから、なんでもありかと。
sazi

2018/07/13 12:48

numは項目名でvarcharですよ?
Orlofsky

2018/07/13 13:10

ネーミングで騙されました。汗
Orlofsky

2018/07/13 13:25

昔、グループで開発していたメンバーが抜けた後、その人が担当していたFUNCTIONの実行文にRETURN NULL; の1行だけ書いてあったのを思い出しました。仕様を理解できないのを誤魔化したのであろうと、残留組の意見が一致しました。
Hanbe.T

2018/07/13 14:22

>Orlofsky様 ネーミングの件、申し訳ありません。 また、下記にも記載いたしましたが、確認したところ、各自が置き換えて使用する項目で特別な意味を持つ項目ではありませんでした。 お騒がせして、申し訳ありませんでした。
guest

0

ベストアンサー

単に、INSERT/UPDATEされた場合のT20180712_01.numの値を'[MIN]'や'[MAX]'と言う文字と比較しているだけです。
.numをそのシステムでの何かのルールをもって設定していると思われるので、そのルールを確認されると良いかと思います。

トリガー自体は、パーティショニングしたテーブルの振り分けをしてるもののようですね。

投稿2018/07/13 01:37

編集2018/07/13 13:41
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hanbe.T

2018/07/13 14:19

本日、テスト環境の構築チームに問い合わせたところ、そこはテスト実施者が好きに置き換えてよい項目としている。との回答をいただきました。 別チーム管理のテーブルであったことと、そのDDLに関する説明がなかったので、TRIGGER内で使用可能な特別な値なのかもしれないと考えておりました。 お騒がせして、大変申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問