タグ付けされた質問 「postgresql-9.3」

PostgreSQLバージョン9.3

1
報告されたインデックスサイズと実行プランのバッファ数の大きな不一致
問題 次のようなクエリがあります SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; (10分後に)タイムアウトになることが多いため、この問題を調査することにしました。 EXPLAIN (ANALYZE, BUFFERS)出力は次のようになります。 Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp read=3631 written=3617 I/O Timings: …

2
PL / pgSQL関数でレコードを返す-クエリを高速化する
私が持っているPerlで書かれた非フォークゲームデーモンのPostgreSQL 9.3データベースに書き込みプレーヤー統計にacyncクエリを使用しています、。しかし、データベースから何かを読み取る必要がある場合(プレーヤーが禁止されている場合や、プレーヤーにVIPステータスがある場合など)は、同期クエリを使用します。 これにより、データベースから値が読み取られるまで、ゲームが一瞬停止します。 値を読み取るために非同期クエリを使用するようにゲームデーモンを書き換えることはできません(試してみましたが、変更が多すぎました)。私の質問は、いくつかの無関係なクエリを組み合わせることは理にかなっています(新しいプレーヤーの場合に行う必要があることです)接続)を1つのプロシージャに追加し、Perlプログラムに同時にいくつかの値を返すにはどうすればよいですか? 現在のクエリはすべて、プレーヤーIDをパラメーターとして取り、1つの値を返します。 -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? select count(nullif(nice, false)) - count(nullif(nice, true)) as rep from pref_rep where id=? -- Is he or she a special VIP player? select vip > now() …

1
再帰CTEのカーディナリティを「ヒント」にするにはどうすればよいですか?
最小限の例として次の再帰CTEを使用していますが、一般的に、オプティマイザは再帰CTEにデフォルトの「推測」カーディナリティを使用する必要があります。 with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * …

3
WindowsでPostgreSQLのマイナーアップグレードを行う方法(例:9.3.0から9.3.1)
Enterprise DBビルドのWindowsインストーラーを使用して、PostgreSQLから9.3.0から9.3.1へのマイナーアップグレードを実行するための推奨される方法は何ですか?最初にアンインストールする必要がありますか、それとも既存のインストールに上書きしてインストールしますか? 現在のインストールはpostgresql-9.3.0-1-windows-x64.exeを使用して実行されました。次に、postgresql-9.3.1-1-windows-x64.exeを使用してアップグレードします。

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 …

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、実際のビュー定義が含まれます。 それで、なぜこれが起こっているのですか?君たちありがとう!

3
billions-rows-tableでの遅いクエリ//使用されたインデックス
私は若い開発者であり、データベース(PostgreSQL 9.3)の使用にあまり熟練していないので、本当に助けが必要なプロジェクトでいくつかの問題に遭遇しました。 私のプロジェクトは、デバイス(最大1000台以上のデバイス)からデータを収集することです。この場合、すべてのデバイスが毎秒1つのデータブロックを送信し、1時間あたり約300万行になります。 現在、すべてのデバイスの受信データを格納する1つの大きなテーブルがあります。 CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) データブロックに含めることができる(またはできない)データにはいくつかの種類があるため、テーブルを参照する他のテーブルがありdata_blockます。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 1つのdata_blockに3x dataA、1x dataBがあるが、dataCがない可能性があります。 データは数週間保持されるため、このテーブルには約50億行を格納します。現時点では、テーブルに6億行まであり、クエリには非常に長い時間がかかります。私のselectステートメントは常にクエリを実行し、多くの場合はtime + macもクエリを実行するため、私はtimestampandとmacでインデックスを作成することにしました。 CREATE …

1
PostgreSQL:ビューから列を削除
VIEW進化スクリプトを作成しようとしている場所があるので、それに列を追加できます。その部分は問題なく動作します。列は問題なく追加されました。ただし、その逆は機能しません。最後に追加された列を削除すると、ERROR: cannot drop columns from viewメッセージが表示されて失敗します。問題は、この特定のビューにはfromとtoの両方に多くの参照があるため、私はまったくDROP CASCADE気の毒なことはできないということです。 新しく追加された列を指定されたものから削除できない理由はありVIEWますか?次に、このタスクを実行するにはどうすればよいですか? (注:ここに示すのは状況ですが、他の多くの場合でも、ビューから列を削除するなど、同じような状況がよくわかります。)

2
プレーンテキストのパスワードなどの機密情報をログから非表示にするにはどうすればよいですか?
Postgresのインストールにアクセスできないため、確認できません。 私はセキュリティ担当者であり、ログにプレーンテキストのパスワードが表示されています。 create user user1 with password 'PLAINTEXT PASSWORD' DBAは、パスワードをログに記録せずにパスワードを変更または作成するにはどうすればよいですか? 私が見てきた、このパスワードのMD5ハッシュを使用できる状態を、が、その後ハッシュは平文でもあります。もっと良い方法はありますか?

2
Postgres 9.3でのjson_object_agg()の実装
json_object_agg()Postgres 9.4 の機能が必要な気がしますが、9.3からのアップグレードは今のところできません。9.3でやりたいことを行う方法はありますか?これが私のシナリオです。click_activity次のようなデータのテーブルがあります user | offer | clicks -----|-------|-------- fred |coupons| 3 fred |cars | 1 john |coupons| 2 しかし、これを次のように変えたいと思います:(ユーザーごとのアクティビティを集計します) user | activity -----|---------- fred | {"coupons": 3, "cars": 1} john | {"coupons": 2} json_object_agg()Postgres 9.4 の機能はこれを完全に行うと思います、私が呼ばなければならないのは select user, json_object_agg(offer, clicks) from click_activity group by 1 9.3でこれを行う方法はありますか?ありがとうございました!

2
出現頻度の高い用語の低速全文検索
テキスト文書から抽出されたデータを含むテーブルがあります。データは、"CONTENT"GINを使用してこのインデックスを作成したという名前の列に保存されます。 CREATE INDEX "File_contentIndex" ON "File" USING gin (setweight(to_tsvector('english'::regconfig , COALESCE("CONTENT", ''::character varying)::text), 'C'::"char")); 次のクエリを使用して、テーブルで全文検索を実行します。 SELECT "ITEMID", ts_rank(setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') , plainto_tsquery('english', 'searchTerm')) AS "RANK" FROM "File" WHERE setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') @@ plainto_tsquery('english', 'searchTerm') ORDER BY "RANK" DESC LIMIT 5; ファイルテーブルには250 000行が含まれ、各"CONTENT"エントリは1つのランダムな単語とすべての行で同じテキスト文字列で構成されます。 ここで、ランダムな単語(テーブル全体で1ヒット)を検索すると、クエリは非常に高速に実行されます(<100ミリ秒)。ただし、すべての行にある単語を検索すると、クエリの実行が非常に遅くなります(10分以上)。 EXPLAIN ANALYZEは、1ヒット検索の場合、ビットマップインデックススキャンとそれに続くビットマップヒープスキャンが実行されることを示しています。遅い検索では、代わりにSeq Scanが実行されますが、これは非常に時間がかかっています。 もちろん、すべての行に同じデータを含めることは現実的ではありません。しかし、ユーザーがアップロードしたテキストドキュメントやユーザーが実行する検索を制御できないため、同様のシナリオが発生する可能性があります(DBで非常に出現頻度の高い用語で検索)。このようなシナリオで検索クエリのパフォーマンスを向上させるにはどうすればよいですか? PostgreSQL 9.3.4の実行 クエリプランEXPLAIN …

1
類似性関数の最適なインデックス
したがって、このテーブルには620万件のレコードが含まれており、列の類似性を使用して検索クエリを実行する必要があります。クエリは次のとおりです。 SELECT "lca_test".* FROM "lca_test" WHERE (similarity(job_title, 'sales executive') > 0.6) AND worksite_city = 'los angeles' ORDER BY salary ASC LIMIT 50 OFFSET 0 where(year = X、worksite_state = N、status = 'certified'、visa_class = Z)にさらに条件を追加できます。 これらのクエリの一部を実行すると、30秒を超える非常に長い時間がかかる場合があります。時々1分以上。 EXPLAIN ANALYZE 前述のクエリの私にこれを与えます: Limit (cost=0.43..42523.04 rows=50 width=254) (actual time=9070.268..33487.734 rows=2 loops=1) -> Index Scan using index_lca_test_on_salary …

2
タイムスタンプの範囲(1列)でのクエリの最適化
HerokuでPostgres 9.3を使用しています。 毎日多くの挿入と更新を行う100万件以上のレコードを含む「トラフィック」テーブルがあります。このテーブル全体でさまざまな時間範囲でSUM操作を実行する必要があります。これらの呼び出しには最大40秒かかる可能性があり、それを改善する方法に関する提案を聞きたいです。 このテーブルには次のインデックスが設定されています。 CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; SELECTステートメントの例を次に示します。 SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= 'Mon, 27 …

2
なぜVACUUM ANALYZEはすべての死んだタプルをクリアしないのですか?
VACUUM ANALYZE VERBOSE大きなテーブルに大きなDELETE/INSERT変更を加えた後、いくつかの大きなテーブルで「手動」を実行します。これは問題なく機能しているように見えますが、テーブルのVACUUMジョブが数時間実行されることがあります(同様の問題と理由については、この投稿を参照してください)。 さらに調査を行ったところ、実行後でも、多数のデッドタプルを持つ大きなテーブルがあることがわかりましたVACUUM。たとえば、このレスポンスのクエリから生成された統計の一部を次に示します。 -[ RECORD 50 ]--+--------------------------- relname | example_a last_vacuum | 2014-09-23 01:43 last_autovacuum | 2014-08-01 01:19 n_tup | 199,169,568 dead_tup | 111,048,906 av_threshold | 39,833,964 expect_av | * -[ RECORD 51 ]--+--------------------------- relname | example_b last_vacuum | 2014-09-23 01:48 last_autovacuum | 2014-08-30 12:40 n_tup | 216,596,624 dead_tup …

1
PostgreSQLストリーミングとファイルベースのレプリケーション(サーバーの動作と構成の観点から)
本番環境でトラブルシューティングできるように、PostgreSQLレプリケーションの最適な使用法とその仕組みを理解しようとしています。 これらの2種類のレプリケーションの違いを(1)構成(2)2つのサーバーのマスター/スレーブが各シナリオでどのように実行するかという点を理解するのに苦労しています PostgreSQL(9.2以降)でのレプリケーションは、基本的にサイズが16MBのXLOGファイル(各ファイルを作成するための周波数設定に依存)がマスターで作成され、なんらかの方法でスレーブに送信されます。 私の設定(この質問の目的のため) マスターarchive_command = 'rsync -av%p postgres @ [SlaveIP]:[wal_archive_folder] /%f' 上のPostgresql.confの設定 ログファイルを読み取るためのスレーブ上のRecovery.confの構成 restore_command = 'cp [wal_archive_folder] /%f \ "%p \"' primary_conninfo = 'host = [MasterIP] port = 5432 user = postgres' 私の質問は、この構成のどの部分がこの「ストリーミング」レプリケーションと「ログシッピング」を作るのかということです。私のマスターは、rsyncを使用してスレーブにログを送信するように構成されています(これはログ配布ですか?)私のスレーブは、recovery.confでマスターに接続できるように構成されています(これはストリーミングですか?) 質問の後半:何が起こっているのですか?WAL_senderとWAL_receiverを介してPostgreSQLに別のプロトコルがあることを理解しています。しかし、これがストリーミングのみに使用されているかどうかは不明です。使用されている場合、マスターでrsyncはどのように使用されていますか? :) ありがとうございました!!そして、これが明らかな質問であれば申し訳ありません。私はブログや本をたくさん読んでいますが、理解に苦労しています。Postgres wikiは非常に詳細なので、すべてを完了するには長い時間がかかります(そして私には期限があります)

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