データベース管理者

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

2
配列の効率的なマージ(重複の削除)
テーブルが2つleft2ありright2ます。両方のテーブルは大きくなります(1〜1000万行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); このタイプのクエリを実行します。 SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

2
psql:SELECT *…1つの列を除く
私は、psqlで1つを除くすべての列を選択する簡単な方法を検索します。 psql私は対話型のコマンドラインを意味します。 *引用符で囲まれた列名のリストに拡張できるツールがあれば幸いです。次に、カラムを取り外して手で取り外すことができます。 私の質問は、psqlのインタラクティブな使用法についてです。これは、SQL標準に不満があり、「select * -foo」のようなものを実行したいという人々の質問の複製ではありません。
10 postgresql  psql 

1
タイムスタンプフィールドの無効なデフォルト値(mysql 5.7)
編集:mysql 5.6から既存のデータベースを更新して実行する場合: UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00'; これにより、以下が生成されます。 #1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1 #1067 - Invalid default value for 'shift_start' これはmysql <= 5.7で機能しました。これに関するドキュメントが見つかりませんでした...これの問題は何ですか? CREATE TABLE `phppos_register_log` ( `register_log_id` int(10) NOT NULL AUTO_INCREMENT, `employee_id_open` int(10) NOT …
10 mysql  mysql-5.7 

3
サブクエリを追加するとPostgreSQLクエリが非常に遅くなる
150万行のテーブルに対する比較的単純なクエリがあります。 SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 出力: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …


1
postgresql pg_dumpがビューをテーブルとしてエクスポートするのはなぜですか?
私はPostgreSQL 9.3 pg_dumpツールを使用して、以下を使用してパブリックスキーマ定義のみを抽出しています。 pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql しかし、チェックするschema.sqlと、ビューの1つがCREATE TABLEステートメントではなくステートメントに表示されますCREATE VIEW。 しかし、私pg_dumpが特定のビューを使用している場合: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql 次にschema.sql、実際のビュー定義が含まれます。 それで、なぜこれが起こっているのですか?君たちありがとう!

1
インデックスを使用してpostgresでのソートを高速化する方法
私はpostgres 9.4を使用しています。 のmessagesスキーマは次のとおりです。メッセージはfeed_idに属し、posted_atを持っています。また、メッセージには親メッセージを含めることができます(返信の場合)。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

3
並行テーブルベースのキューを実装する最良の方法
MySQLに、処理されるリンクのキューを表すテーブルがあります。リンクは外部アプリによって1つずつ処理され、最後に削除されます。これは大量のキューであり、処理アプリの複数のインスタンスが複数のサーバーに分散しています。 各レコードが1つのアプリのみによって選択されるようにするにはどうすればよいですか?レコードにフラグを付ける/ロックする方法はありますか? 現在、2つ以上が同じリンクを取得しないようにするために、各インスタンスが特定のレコードセット(IDのMODに基づく)のみを取得することを許可していますが、これはキューの処理を増やす透過的な方法ではありません新しいインスタンスを追加するだけでスピードアップ。
10 mysql  queue 

1
PostgreSQLでの読み取り専用の単一テーブルアクセスに対する最小限の権限
以下は、新しいユーザー(ログイン)を作成し、PostgreSQL上の指定された1つのテーブルに読み取り専用アクセスを許可するように機能するように見えるコマンドのリストです。 これらのコマンドは、ログイン時に十分な権限で実行されると想定します(つまりpostgres、デフォルトのインストールでのログイン)。 CREATE ROLE user_name NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity'; ここで、データベースのselectテーブルtab_abcに付与したいdb_xyzので、ここに移動します(データベースdb_xyzは、PgAdminなどで現在のデータベースとして選択されています)。 grant select on tab_abc to user_name; 問題は次のとおりです。これで十分ですか、それとも追加の助成金(データベースconnectなどusage)が必要ですか? これらのコマンドは機能するようですが、デフォルトのインストールにはデフォルトのセキュリティ設定があります。サーバー管理者がより強力なセキュリティを構成している場合、どのような追加の許可を追加する必要がありますか? 私が許可する必要がないと思われconnectたりusageしているという暗示を付与しながら、 - select?いつもそうですか?

1
Amazon RDS PostgreSQLで外部キーを一時的に無効にする方法は?
既存のテスト環境をAmazon RDS PostgreSQLに移行しています。テストフレームワークには、特定のテーブルのデータを以前の状態にリロードする機能があります。このため、外部キーを無効にし、既存のデータを削除し、保存状態をロードして、外部キーを再度有効にします。 現在、テストフレームワークはすべてのトリガーを無効にすることで外部キーを無効にします(もちろん、これにはスーパーユーザーが必要です)。 alter table tablename disable trigger all; RDSでは、これは失敗します。 エラー:拒否された権限:「RI_ConstraintTrigger_a_20164」はシステムトリガーです Amazon RDS PostgreSQLで外部キーを一時的に無効にするにはどうすればよいですか? 注:同様の質問がすでに尋ねられています(RDS上のPostgreSQL:FK制約を使用してデータを一括インポートする方法は?)

2
ロックを待機しているPostgreSQLのALTER TABLEクエリをキャンセルしても安全ですか?
ALTER TABLE数時間前にクエリを開始しましたpg_stat_activityが、ロックを待機していることが(を介して)最近認識されました。変更したいテーブルをロックしていて、それを手放さない他のクエリを発見しました。 このクエリは(列のデータ型を変更する)「単純な」クエリですが、大規模なテーブルで実行されています。 ロックを保持しているプロセスを強制終了するのではなく、を強制終了することにしましたALTER TABLE。 トランザクションでラップしませんでしたALTER TABLE。 私の理解する限り、クエリがロックを待機しているという事実は、常にロックを待機していて、何も変更していないことを意味します。 これは本当ですか?ALTER TABLEクエリを完全にキャンセルしても安全ですか?または、クエリがすでに何かを変更していて、それをキャンセルすると、データベースが何らかの中間状態になる可能性がありますか? PS:を使用してキャンセルする予定ですSELECT pg_cancel_backend(pid);。これが悪い考えであるなら、私に知らせてください。

3
(他のストアドプロシージャで)ストアドプロシージャが使用されている場所をどのように見つけますか
何千ものSPを持つデータベースに、リファクタリングしたいストアドプロシージャがあります。他のSPでそのストアドプロシージャへの参照をすばやく見つける方法はありますか?そうすれば、リファクタリングするときに他のコードを壊していないことを確認できます。 アプリケーションコードでは、SPへの呼び出しを簡単に検索でき、SPを定義するさまざまなSQLファイルすべてに対してテキスト検索を実行できますが、データベース内に一部のSPが存在しない可能性があります。 。 編集:私が見つけようとしているストアドプロシージャは、パッケージの一部です。 編集:私はOracle 11gで実行しています

1
MySQL InnoDB Deadlock for 2つの単純な挿入クエリ
この2つの挿入クエリにはデッドロックがあります。 insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) InnoDBのステータスは次のとおりです。 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, ACTIVE …
10 mysql  innodb  deadlock 

1
一時テーブルにデータをロードするときに最小限のログを取得します
データロードパフォーマンスガイドを読んでも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。 一時テーブルは、SIMPLEリカバリモードで動作するTempDBで作成されるのは明らかなので、最小限のロギングの完璧な候補だと思いましたが、確認するための通路が見つかりません。 一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?

2
バッファプール外のSQL Server 2012メモリ消費
SQL Server 2012 SP2 Enterprise Editionのインスタンスを使用しており、最大よりも20 GB高いメモリを消費しています。メモリ制限。インスタンスは65GBに制限されていますが、以下のクエリで使用中の物理メモリは86GBを示しています SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM sys.dm_os_process_memory; GO サーバーは2つのNUMAノードを持つ物理的なものです。バッファプールの外でメモリを消費しているものを見つける方法はありますか(それが起こっていると想定しています)? DBCC MEMORYSTATUSの出力は次のとおりです。 そして、ここに設定されたメモリ制限があります:- 前もって感謝します。 更新:-アーロンが提案したクエリを実行しました SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC これが出力です:- pages_kbの合計は最大60GBになります UPDATE 2: - DBCC MEMORYSTATUSの全出力はここにある: - http://pastebin.com/nGn6kXEc UPDATE 3: -ここでは、Excelファイル内Shankyのスクリプトの出力: - http://jmp.sh/LKRlH4K 更新4:-出力のスクリーンショット:- SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM …

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