- 締切済み
INSERTできるレコード数を制限する。
こんにちは。 postgresでレコード数を意識した操作では、SELECT句のlimitが 思いつくのですが、DBのテーブルに登録できる最大行数を設定し、 最大行数を超えたらINSERTが強制的にできないようにする方法 に悩んでいますので、教えて下さい。 環境はredhat9+apache2+tomcat+Jsp+Java1.4+postgres7.2で開発・ 保守をしています。 既にWebで公開されており、既に登録された企業の中から好きな企業 に会員として登録し以降その企業のサービスを受けるシステムです。 営業でのプレゼン兼貸出し用(デモ版)としてノートPCに構築する ことになりました。 「デモ版」と言うことで、機能制限をかける方法として、 ・登録できるレコード数を制限する と方針になりました。 他に、Javaソースに制限機能を追加、.httpaccsessによる認証を 検討しましたが、これに決まった次第です。 すみませんが、ご教授の程お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
「表の格納行数の上限を、行数で利用者が設定」といった機能は、殆どのRDBMSで持っていません。 要件が不明確なのですが、例えばシーケンスを使うか、自前で通番を付け、check制約で値の上限を設定してしまうといった方法も考えられます。 もし、削除が行われない前提なら、これだけで実装可能になります。 もし削除があるなら、次回格納時は、「欠番になっている最小の通番」を再利用するといった仕組みが必要になります。 以上は、「デモ版」ということなら、適用してもいいように思います。
postgresの仕様では『DBのテーブルに登録できる最大行数を設定』 なんてないんじゃないかな? 考えられる方法としてはInsert前に動くトリガー関数を定義して その中でselect countしてエラーを返せばいいかなと思うけど。 アプリ側でそのエラー処理する必要があるね・・・。
お礼
ご回答ありがとうございます。 >postgresの仕様では『DBのテーブルに登録できる最大行数を設定』なんてないんじゃないかな? やはりそうなのですか… 書籍やWebで検索しても「最大可能な行数」が殆どで悩んでいました。 >アプリ側でそのエラー処理する必要があるね・・・。 避けることはできませんか…。 検討してみます。 ありがとうございました。