タグ付けされた質問 「constraint」

データベースにデータ整合性ルールを適用するチェックや外部キーなどの宣言的メカニズム。

2
1つの列に特定の値がある場合にのみ適用されるカスタムの一意の列制約
次のようにカスタムの一意の列制約を持つことは可能ですか?2つのcol subsetとtype、両方の文字列があると仮定します(データ型はおそらく重要ではありませんが)。 Ifはtype「真」である、私はの組み合わせをしたいtypeとsubset一意です。それ以外の場合、制約はありません。DebianでPostgreSQL 8.4を使用しています。

4
Postgresがすでに使用されているPK値を生成するのはなぜですか?
私はDjangoを使用していますが、時々このエラーが発生します: IntegrityError:重複キー値が一意の制約 "myapp_mymodel_pkey"に違反しています 詳細:キー(id)=(1)は既に存在します。 実際、私のPostgresデータベースには、主キーが1のmyapp_mymodelオブジェクトがあります。 Postgresが再びその主キーを使用しようとするのはなぜですか?または、これはおそらくアプリケーション(またはDjangoのORM)がこれを引き起こしているのでしょうか? この問題は、ちょうど3回続けて発生しました。私が見つけたのは、それが発生した場合、特定のテーブルの行で1回以上発生し、その後は発生しないことです。これは、数日間完全に停止する前にすべてのテーブルで発生し、発生したテーブルごとに少なくとも1分程度発生し、断続的にのみ発生するようです(すぐにすべてのテーブルが発生するわけではありません)。 このエラーが非常に断続的である(2週間で3回程度しか発生しなかった-DBに他の負荷がなく、アプリケーションをテストしているだけである)ため、低レベルの問題に非常に警戒しています。

2
WITH CHECK CHECK CONSTRAINTとは何ですか?
おそらく自動生成されたT-SQLがいくつかありますが、これはおそらく有効ですが、実際にはわかりません。 ALTER TABLE [dbo].[MyTable] WITH CHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; 私は外部キー制約が何であるか知っていますが、何CHECK CHECKですか?

1
pg_restore.exeを使用する前に制約を無効にします
pg_restore.exeデータベースからダンプファイルを実行しようとすると、同じように何十ものエラーがスローされます。 ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" これは、データベースをダンプファイル(このファイルは運用データベースから取得)から復元する前に空にしたという事実によるものです。 ... を呼び出す前に、すべてのテーブルの制約とすべての外部キーを無効にし、pg_restore.exeその後、制約と外部キーを再度有効にする方法はありますか。 SOで何か面白いものを見つけました。制約チェックをコミット時間まで延期します。しかし、制約を延期した後にpg_restore.exe内部から呼び出すことはできないと思いpsql.exeます。 また、10年前のこの投稿もあり、制約を削除してから再度追加することを提案しています。または、pg_class reltriggersの値を0に変更すると、制約に対しても可能になります...しかし、それは良い習慣よりもハッキングされているのではないかと思います... この場合のベストプラクティスは何ですか?フラグを使用pg_dump.exe して-clean使用すると、データベースを復元するときに制約チェックをバイパスするダンプが作成されますか?

2
条件付き外部キーの関係
現在、2つのエンティティ間に外部キーがあり、その関係をテーブルの1つのentityTypeを条件とするようにします。これがテーブルの階層です。これは、子から親へのFK参照を介して行われます Store / \ Employees \ TransactionalStores / | \ Kiosks | BrickMortars Onlines 現在、従業員から店舗へのFK関係があります ALTER TABLE Employees ADD CONSTRAINT Employee_Store FOREIGN KEY (TransStoreId) REFERENCES TransactionalStores(StoreId) 条件を追加したい: WHERE TransactionalStores.storeType != 'ONLINE_TYPE' これは可能ですか、またはTransactionalStoresを2つの新しいsubType(PhysicalStoresおよびVirtualStoresなど)にサブクラス化する必要がありますか

2
SQL Serverは、システムで生成された制約名に競合を作成できますか?
SQL Server 2008データベース(非クラスター化)に数百万のテーブルを作成するアプリケーションがあります。SQL Server 2014(クラスター化)にアップグレードしようとしていますが、負荷がかかっているときにエラーメッセージが表示されます。 「データベースに「PK__tablenameprefix__179E2ED8F259C33B」という名前のオブジェクトが既に存在します」 これは、システムで生成された制約名です。ランダムに生成された64ビットの数字のように見えます。多数のテーブルが原因で衝突が発生している可能性はありますか?テーブルが1億個あると仮定すると、次のテーブルを追加するときに衝突が発生する可能性は1兆分の1未満ですが、それは均一な分布を前提としています。衝突の可能性を高めるために、SQL Serverがバージョン2008と2014の間で名前生成アルゴリズムを変更した可能性はありますか? もう1つの重要な違いは、2014年のインスタンスがクラスター化されたペアであることですが、上記のエラーが発生する理由の仮説を立てるのに苦労しています。 PSはい、何百万ものテーブルを作成するのは非常識です。これは、私が制御できないブラックボックスのサードパーティコードです。狂気にもかかわらず、バージョン2008では機能しましたが、現在はバージョン2014では機能しません。 編集:詳細な検査では、生成されたサフィックスは常に179E2ED8で始まるようです-つまり、ランダムな部分は実際には32ビットの数字であり、衝突の確率は新しいテーブルが追加されるたびに50分の1です私が見ているエラー率にはるかに近い一致です!

2
制約-1つのブール行はtrue、他のすべての行はfalse
列があります: standard BOOLEAN NOT NULL 1つの行をTrueに、その他の行をすべてFalseに強制したいと思います。この制約に応じて、FKやその他のものはありません。私はplpgsqlでそれを達成できることを知っていますが、これは大槌のようです。CHECKまたはUNIQUE制約のようなものを好みます。シンプルなほど良い。 1つの行はTrueでなければなりませんが、すべてFalseにすることはできません(したがって、最初に挿入された行はTrueである必要があります)。 行を更新する必要があります。つまり、すべての行が最初にFalseに設定され、その後に1つの行がTrueに設定される可能性があるため、更新が完了するまで制約を確認するのを待つ必要があります。 そこの間にFKがあるproducts.tax_rate_idとtax_rate.id、それはデフォルトまたは新製品を作成する容易にするために、ユーザが選択可能で、標準税率、とは何の関係もありません。.. 重要な場合はPostgreSQL 9.5。 バックグラウンド 表は税率です。税率の1つがデフォルトです(standardデフォルトはPostgresコマンドであるため)。新しい商品が追加されると、標準の税率が商品に適用されます。がないstandard場合、データベースは推測またはすべての種類の不要なチェックを実行する必要があります。簡単な解決策は、があることを確認することだと思いましたstandard。 上記の「デフォルト」とは、プレゼンテーション層(UI)を意味します。デフォルトの税率を変更するためのユーザーオプションがあります。GUI /ユーザーがtax_rate_idをNULLに設定しないようにするために追加のチェックを追加するか、デフォルトの税率を設定する必要があります。

4
列の制約(インデックス)の削除
インデックスがあるテーブルのタイプを変更するにはどうすればよいですか?空のテーブルで列を変更して型を日付時刻からvarchar(15)に変更しようとしましたが、列(インデックスであることが判明)に依存しているというエラーが表示されました。 インデックスを右クリックしてドロップをスクリプト化することで、これをローカルで簡単に回避できましたが、インデックス名にアクセスできない他のサーバーでこれを展開する必要があります。 インデックスを削除するスクリプトを作成する方法はありますか?列でそのデータ型を変更してからインデックスを読み取ることができますか?ありがとう!

2
SQL Server 2005のNullable列の一意の制約
私が取り組んでいるこの1つのプロジェクトでは、特定のフィールドを一意に設定する必要があります(問題ではありません!)が、フィールドがnullの場合、制約を無視する必要があります。Sql Server 2008では、以下に示すようにフィルター選択されたインデックスを使用しますが、これは以前のバージョンのSQLでは使用できません! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL しかし、これはSQL Server 2005で利用できるとは思いません。実際、このブログ投稿では、トリガーを使用して一意性を確認する回避策があることを示しています。誰もこれの例を持っていますか?または多分代替案? 残念ながら、SQl Server 2008へのアップグレードは、この特定のクライアントのオプションではありません!!

3
テーブルの作成中にデフォルトの制約を追加するにはどうすればよいですか?SQL Server [終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 3年前休業。 以下に示すように、列の後に制約が続く新しいテーブルを作成しようとしています。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) ただし、デフォルトの制約に近いエラーメッセージが表示されます。 「for」の近くに不正な構文

2
MySQL-それ自体を参照する外部キー制約を持つ行を削除します
ユーザーが私のウェブサイトに投稿したすべてのフォーラムメッセージを保存するテーブルがあります。メッセージ階層構造は、入れ子集合モデルを使用して実装されます。 以下は、テーブルの単純化された構造です。 Id(主キー) Owner_Id(IDへの外部キー参照) Parent_Id(IDへの外部キー参照) nleft そろそろ nlevel これで、テーブルは次のようになります。 + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | Id | Owner_Id | Parent_Id | nleft | nright | nlevel | + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | 1 …

1
###。###。####パターン一致を強制するCHECK制約
マルチパートコードにこの正規表現パターンを適用するチェック制約が必要です。 ^\d{3}\.\d{3}\.\d{4}$ ... 3つの数字、ピリオド、3つの数字、ピリオド、4つの数字。 パターンマッチングを実施するためにCLR関数を作成する必要がありますか?また、CLR関数はDDLで参照できますか? 別の方法でパターンを適用する方法はありLIKEますか?

5
この更新が一意キー制約違反で失敗するのはなぜですか?
私は「偶然の」DBAであり、比較的経験が浅く、この問題に困惑しています。 MS SQL Server 2012を実行しています。問題はこのUPDATEステートメントにあります。 UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> 'A' これは、vReclaimableビューによって返されるtAcctsテーブルの行のみを更新する必要があります。 vReclaimableビューはtAcctsテーブルに基づいており、tAcctsの行のサブセットを返します。 実行すると、一意のキーエラーで失敗します。 (0 row(s) affected) …

1
入力をいくつかの異なる文字列に制限する
こんにちは私はpostgreSQLで期待どおりに制約が機能していないようです。pgadmin内から、次のSQLクエリを実行します。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; 実行するとこれに変換されます。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK …

2
外部キー制約違反の問題
私は3つの状況を特定しました。 登録のない学生。 登録はあるが成績がない学生。 登録と成績を持つ学生。 登録テーブルには、GPAを計算するトリガーがあります。学生に成績がある場合は、GPAテーブルにエントリを更新または挿入します。成績なし、GPAテーブルエントリなし。 登録のない生徒を削除できます(#1)。登録と成績(上記の#3)を持つ学生を削除できます。しかし、登録はあるが成績がない学生は削除できません(#2)。参照制約違反が発生します。 DELETEステートメントがREFERENCE制約「FK_dbo.GPA_dbo.Student_StudentID」と競合しました。データベース ""、テーブル "dbo.GPA"、列 'StudentID'で競合が発生しました。 登録がなく(GPAエントリもない)新しい生徒を削除できなかった場合、制約違反は理解できますが、その生徒を削除できます。登録がなく、成績もない(それでもGPAエントリがない)学生は削除できません。 トリガーにパッチを適用したので、次に進むことができます。これで、登録がある場合、トリガーは何があってもGPAテーブルに挿入します。しかし、私は根本的な問題を理解していません。説明をいただければ幸いです。 それが価値があるもののために: Visual Studio 2013 Professional。 IISエクスプレス(VS2013の内部)。 EntityFramework 6.1.1を使用するASP.NET Webアプリ。 MS SQL Server 2014 Enterprise。 GPA.Valueはnull可能です。 Enrollment.GradeIDはnull可能です。 これはデータベースのスニペットです: - 編集 - テーブルはすべてEntityFrameworkによって作成され、SQL Server Management Studioを使用して作成しました。 次に、制約付きのテーブル作成ステートメントを示します。 GPA テーブル: CREATE TABLE [dbo].[GPA]( [StudentID] [int] NOT NULL, [Value] [float] NULL, CONSTRAINT …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.