データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

4
sys.databasesのいくつかの列の照合はどうなっていますか?
2005年から2012年までのさまざまなバージョンのSQL ServerにUNPIVOT含まれるさまざまな列でを実行しようとしていますsys.databases。 UNPIVOT次のエラーメッセージで失敗しています。 メッセージ8167、レベル16、状態1、行48 列「CompatibilityLevel」のタイプは、UNPIVOTリストで指定された他の列のタイプと競合します。 T-SQL: DECLARE @dbname SYSNAME; SET @dbname = DB_NAME(); SELECT [Database] = unpvt.DatabaseName , [Configuration Item] = unpvt.OptionName , [Configuration Value] = unpvt.OptionValue FROM ( SELECT DatabaseName = name , RecoveryModel = CONVERT(VARCHAR(50), d.recovery_model_desc) , CompatibilityLevel = CONVERT(VARCHAR(50), CASE d.[compatibility_level] WHEN 70 THEN 'SQL Server 7' …

3
PostgreSQLには、タイプセーフなfirst()集約関数がありますか?
完全な質問の書き直し First()集計関数を探しています。 ここで、ほとんど機能するものを見つけました。 CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement ) RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$ SELECT $1; $$; -- And then wrap an aggregate around it CREATE AGGREGATE public.first ( sfunc = public.first_agg, basetype = anyelement, stype = anyelement ); 問題は、varchar(n)列がfirst()関数を通過するときに、単純なvarchar(サイズなし)に変換されることです。関数でクエリをRETURNS SETOF anyelementとして返そうとすると、次のエラーが表示されます。 エラー:クエリの構造がSQL:42804関数結果の型と一致しません。 )RETURN …

1
ディスクスペースをオペレーティングシステムに戻すVACUUM
VACUUM通常、特別な場合を除いて、オペレーティングシステムにディスク領域を返しません。 ドキュメントから: 標準形式でVACUUMは、テーブルとインデックス内の無効な行バージョンを削除し、将来の再利用に使用可能なスペースをマークします。ただし、テーブルの最後の1つ以上のページが完全に空になり、排他的なテーブルロックを簡単に取得できる特別な場合を除いて、オペレーティングシステムに領域を返しません。対照的に、VACUUM FULLデッドスペースのない完全に新しいバージョンのテーブルファイルを書き込むことにより、アクティブにテーブルを圧縮します。これにより、テーブルのサイズが最小になりますが、時間がかかる場合があります。また、操作が完了するまで、テーブルの新しいコピー用に追加のディスク領域が必要です。 問題は、このデータベースの状態をどのone or more pages at the end of a table become entirely freeように達成できるかということです。これはを介して行うことができますがVACUUM FULL、実装するのに十分なスペースがありません。他の可能性はありますか?

12
コードではなくデータベースに制約が適用されるのはなぜですか?
データベースに制約が適用されるのはなぜですか?それをコードに入れることはより柔軟ではないでしょうか? データベースの実装に関する初心者向けの本を読んでいるので、これを初心者として尋ねています。このエンティティモデルを含むデータベースを設計したとしましょう。 entity type | sub-types ----------------+-------------------------------------------- Person | Employee, Student, ... Student | Graduate, Undergraduate, ... Employee | Teacher, Administrator, ... 現在の制約: システムの登録者は、学生または従業員のみです。 個人エンティティには社会的番号の一意性が必要です。これは、すべての個人が一意の一意の名前(別名、十分に優れた主キー)のみを保持していることを前提としています。(#1を参照) 後で番号1を削除することにしました。ある日、大学がTeacher(Employeeサブタイプ)もStudent自由時間でコースを取ると決定した場合、数千、数百万、数十億のデータベース設計を変更するのははるかに困難です。コードのロジックを変更するだけでなく、数十億のエントリ:学生と従業員の両方として個人を登録することを許可しなかった部分のみ。 (ありそうもないことですが、今のところ他に何も考えられません。 どうやらそれは可能です)。 コードではなくデータベース設計でビジネスルールを重視するのはなぜですか? #1:7年後のメモ、実際の例: 私は、ミスのために発行されたSSNが複製された政府を見ました:複数の人々、同じSSN。元のDBの設計者は、この一意性制約をデータベースに適用しないという間違いを間違いなく犯しました。(そして元のアプリケーションのバグ?共有データベースを使用している複数のアプリケーションが制約をどこに置き、チェックし、強制することに同意しませんか?...)。 このバグは、今後何年もの間、システムとその後に開発されたすべてのシステムで存続し、元のシステムのデータベースに依存します。ここで答えを読んで、可能な限り多くの制約をデータベースに賢明に(盲目的にではなく)適用して、現実の物理的な世界をできるだけうまく表現することを学びました。

3
SQL Server Management Studioのオートコンプリートを抑制する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 クエリの入力中にSQL Server Management Studioのオートコンプリートを一時的に抑制する方法はありますか?オートコンプリートを完全に無効にしたくないのは、特定の単語を入力するときにキーを押したままにして、邪魔にならないようにするだけです。 たとえば、次のクエリがあったとします SELECT Foo, Foo2 FROM SomeTable 入力してFooからスペースバーを押すと、SQL Server Management Studioのオートコンプリートが開始され、完了FooしFooBarます。

3
最小のダウンタイムで大きなテーブルにrowversion列を追加するにはどうすればよいですか
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Server 2008以降を使用して、rowversion列を大きなテーブルに追加したいのですが、単純に ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL その後、更新のためにテーブルが長すぎます。 このダウンタイムを減らすためにどのような戦略を使用できますか?何でも検討します。もちろん、単純であればあるほど良いのですが、どのような戦略も検討します。 私の考えでは、最後の手段として、トリガーによって維持されるコピーステージングテーブルを維持してから、ステージングテーブルを元のテーブルにsp_renameできると考えています。しかし、私はもっとシンプルで簡単なものを望んでいます。

1
永続化された計算列を選択すると、SQL Serverが「Compute Scalar」になるのはなぜですか?
SELECTこのコードの3つのステートメント USE [tempdb]; GO SET NOCOUNT ON; CREATE TABLE dbo.persist_test ( id INT NOT NULL , id5 AS (id * 5) , id5p AS (id * 5) PERSISTED ); INSERT INTO dbo.persist_test (id) VALUES (1), (2), (3); SELECT id FROM dbo.persist_test; SELECT id5 FROM dbo.persist_test; SELECT id5p FROM dbo.persist_test; DROP …


1
INSERT…ON DUPLICATEを使用したmysqldump
あるデータベースのデータを別のデータベースにマージしたい。そこで、ダンプを作成しmysqldumpてから、別のデータベース(同じテーブル構造)にインポートします。この場合、問題(重複したエントリなど)はありません。 ただし、テストのためにいくつかのマージを行い、後で最終マージを行います。だから、私は数回マージを実行したい(データが変更される可能性があります)。テーブルの行は削除されず、挿入または更新のみが可能です。 ON DUPLICATEオプションでmysqldumpを作成できますか?または、新しいデータを挿入して変更されたデータを更新するダンプをマージできますか? 確かに、ON DUPLICATEダンプに手動で挿入できますが、マージプロセスを自動化したいです。

2
PgAdmin III-パスワードが空のときにデータベースに接続する方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Server Faultから移行されました。 8年前に移行され ました。 PCにPostgreSQL 9.1をインストールしました(Win 7)。とで正常に接続する小さなJavaアプリケーションがlogin=saありpassword=""ます。接続が機能します。 ただし、PgAdmin III自体からは拒否されます。私は得る: Error connecting to the server: fe_sendauth: no password supplied 空のパスワードでPgAdmin IIIからデータベースに接続するにはどうすればよいですか? 編集 これは単なるテストであり、量産コードではありません。



3
varchar(255)またはvarchar(256)?
テーブルを使用する必要がありますvarchar(255)かvarchar(256)?列の長さ、またはメタデータの保存に1バイトが使用されていると聞きました。 この時点でそれはもう重要ですか? 私はインターネット上でいくつかの投稿を見ましたが、それらはOracleとMySQLに適用されます。 Microsoft SQL Server 2016 Enterprise Editionがありますが、この環境にどのように適用されますか? ここで、たとえば、テキストの説明を256ではなく255文字に保つようにクライアントに指示した場合、違いはありますか?私が読んだこと「DBMSは255文字の最大長で、フィールド内のデータの長さを示すために単一バイトを使用することを選択できます。制限が256以上の場合、2バイトが必要になります。」これは本当ですか?

3
左外部結合にデフォルトを提供できますか?
テーブルa(列a1)およびb(列b1およびb2)があり、左外部結合を実行するとします。 SELECT * FROM a LEFT OUTER JOIN b ON a.a1 = b.b1 b1とb2は、a1の値に一致するb1の値がない場合、NULLになります。 NULLの代わりにb2のデフォルト値を提供できますか?私はのでCOALESCEが、ここでは動作しないことに注意していないがどこB2の潜在的なNULLを上書きするデフォルト値をしたいです B1マッチングa1の値が。 つまり、aとbは CREATE TABLE a (a1) AS VALUES (1), (2), (3) ; CREATE TABLE b (b1,b2) AS VALUES (1, 10), (3, null) ; a1 b1 | b2 --- -------- 1 1 | 10 2 3 …
21 postgresql  join 

5
クエリ、テーブル、またはビューの出力列名とデータ型を返すクエリ
クエリ、テーブル、またはビューのフィールド名とフィールドタイプを返すPostgreSQLクエリまたはコマンドはありますか? たとえば、次のような単純なSELECTクエリに適用されるソリューションは、次のようなSELECT * from personリストを返します。 Column Name | Column Type =========================== First Name | character Last Name | character Age | integer Date of Birth | date 私はinformation_schema以下の回答に記載されているビューを調べましたが、テーブルを非常によくカバーしているようで、ビューもカバーしていると思われますが、まだチェックしていません。 最後は、任意の、しかし有効なSELECTクエリです。たとえば、データベースに対するJOINS、 UNIONSなどが含まれます。組み込みプロシージャ、または有効なQUERYに対してまったく同じを返すことができる他のストアドプロシージャまたはスクリプトはありますか? データを作成し、フォームにクエリを実行するプログラムを開発しています。この情報は、データの検証と返されたデータに対する関数の実行に必要です。

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