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

PostgreSQLのすべてのバージョン。そのコンテキストが重要な場合は、postgresql-11などのバージョン固有のタグを追加します。

2
postgresqlの複数のレコードタイプのgenerate_series
私は、クエリにしたい2つのテーブルがありますpest_countsし、pestsどのように見えます: CREATE TABLE pests(id,name) AS VALUES (1,'Thrip'), (2,'Fungus Gnosts'); CREATE TABLE pest_counts(id,pest_id,date,count) AS VALUES (1,1,'2015-01-01'::date,14), (2,2,'2015-01-02'::date,5); postgresを使用generate_seriesして、日付シリーズで見つかった各タイプの害虫の数を表示します。 予期された結果 name | date | count -------------+------------+------- Thrip | 2015-01-01 | 14 Thrip | 2015-01-02 | 0 .... Fungus Gnats | 2015-01-01 | 0 Fungus Gnats | 2015-01-02 | 5 ... 次のようなものが必要になることはわかっていますが、残りの方法が正確にわかりません。 SELECT …

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
CLIプロンプトでPostgresのバージョンを表示する方法は?
接続しているサーバーのバージョンをコマンドライン(コンソール)インターフェイスプロンプトに表示します。私がドキュメントで読んだものから、シェルコマンドを実行することが可能であり、psql変数値を表示することが可能です。 接続時にサーバーのバージョン情報を取得し、クライアントのプロンプトで使用するという考え方です。どうすれば(.psqlrcファイル内で)サーバーのバージョンをpsql変数に割り当てることができますか? 編集:ジャックダグラス♦は\gset機能を指摘することで正しい答えを持っています。それはで終わった show server_version \gset \set PROMPT1 '%:server_version: >' ありがとうございました。

1
大規模なPostgreSQL / PostGISデータベースの移動
非常に大きな(約320 GB)PostGISデータベースをserver1(PostgreSQL 9.1、PostGIS 1.5)からserver2(PostgreSQL 9.3、PostGIS 2.1)に移動してアップグレードする必要があります。 アップグレードプロセスは十分に文書化されています。問題は、server1にファイルをダンプしてチェックサムし、それをserver2にコピーして合計を確認するのに十分なスペースがないことです。私は試した: を使用して、server1からserver2にダンプをパイピングしますnc。 を使用してserver1にマウントされているserver2ファイルシステムに直接ダンプファイルを書き込む。sshfs どちらの場合も、ダンプファイルが破損しているようです。pg_restoreこのようなエラーで別の場所で壊れました: pg_restore: [compress_io] could not uncompress data: incorrect data check 誰かがこの移動とアップグレードを完了するためのより良い方法を提案できますか? 更新: NFSを試してみました(そしてSSHFSにもう一度試してみました)。これらのリモートファイルシステムがこれだけのデータを確実に転送できないことは明らかです。結果のSQLファイルから明らかにブロックが欠落しているため、インポート中に次のような構文エラーが発生します。 ERROR: invalid input syntax for integer: "8266UPDATE spatial_ref_sys o set auth_name = n.auth_name, auth_srid = n.auth_srid, srtext = n.srtext, proj4text = n.proj4text FROM _pgis_restore_spatial_ref_sys n WHERE o.srid = …

1
SELECT DISTINCT ONサブクエリが非効率的なプランを使用しています
私はテーブルを持っていますprogresses(現在何十万ものレコードが含まれています): Column | Type | Modifiers ---------------+-----------------------------+--------------------------------------------------------- id | integer | not null default nextval('progresses_id_seq'::regclass) lesson_id | integer | user_id | integer | created_at | timestamp without time zone | deleted_at | timestamp without time zone | Indexes: "progresses_pkey" PRIMARY KEY, btree (id) "index_progresses_on_deleted_at" btree (deleted_at) "index_progresses_on_lesson_id" btree (lesson_id) "index_progresses_on_user_id" …

1
2つの可能な所有者/親タイプを持つエンティティのデータベーススキーマ?
私はSequelizeをORMとしてPostgreSQLを使用しています。 1つのタイプがありUserます。2番目のタイプはGroupで、GroupMembershipsテーブルを介して任意の数のユーザーを関連付けることができます。Userは、任意の数のを所有することもできGroupます。 3番目のタイプはPlaylist、UserORまたはaのいずれかに属することができgroupます。このタイプのスキーマを設計して、1つのタイプの所有者またはいずれかのタイプの所有者を持つことができる最善の方法は何ですか? 最初のパスでは両方の関連付けを作成しましたが、一度に1つだけ入力しました。これは機能する可能性がありますが、ハックに見え、クエリを困難にします。 追加情報 コメントを介してMDCCLによって投稿された説明要求に対する私の応答は次のとおりです。 (1)プレイリストが特定のグループによって所有されている場合、このプレイリストは、そのグループのメンバーである限り、1 対多のユーザーに関連していると言えますか? これは技術的には正しいと思いますが、この1対多の関連付けは明示的には存在しません。 (2)では、特定のプレイリストを1 対多のグループが同時に所有することは可能ですか? いいえ、をPlaylist1対多で所有することはできませんGroups。 (3)特定のプレイリストを1 対多のグループ、およびそのようなグループのメンバーではない1 対多のユーザーが所有することは可能ですか? いいえ。(2)のように、1対多のto が存在しPlaylistてGroupはならないためです。さらに、Playlistがによって所有されてGroupいる場合、は所有していませんUser。逆も同様です。一度に1人の所有者のみ。 (4)グループ、ユーザー、プレイリストを一意に識別するために使用されるプロパティは何ですか? それぞれに代理主キー(id)と自然キー(主ではない)があります。これらはslug、GroupおよびPlaylist、およびにusername対応していUserます。 (5)特定のプレイリストで所有者が変更される可能性はありますか? 私はこれが機能であることを計画していませんが(少なくとも最初は)、これは仮説的に発生する可能性があります。 (6)Group.SlugおよびPlaylist.Slug属性の意味は何ですか?それらの値は、主キーとして定義されるのに十分安定していますか、それとも頻繁に変更されますか?これら2つのプロパティの値は、User.Usernameとともに一意である必要がありますか? これらslugのは、固有の小文字のハイフン付きのバージョンであり、それぞれのエンティティのtitleです。たとえばgroup、title「テストグループ」を含むa は「テストグループ」を持ちslugます。重複には増分整数が追加されます。これは彼らのtitle変化がいつでも変わるでしょう。私はそれが彼らが素晴らしい主キーを作成しないことを意味すると思いますか?はい、slugsそしてusernames、それぞれのテーブルにユニークです。

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 …

1
Postgresql:オブジェクトを(json)配列に集約します(サブクエリの問題)
あいまいなタイトルで申し訳ありませんが、これを説明する適切な言葉がわかりません。 一連の列を適切に機能するオブジェクトに変換する次のクエリがあります。 SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t ただし、特定のカテゴリに含まれるオブジェクトを配列にグループ化したいと考えています。このカテゴリは、「cargoProductId」という名前のテーブル内の4番目の列によって定義されます。配列には、キーとして「cargoProductId」の値が必要です。そう: "961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ] だから私はこれと最後の1時間半ほど苦労してきました。私にはこれを行う方法の手がかりは本当にありません。これは私が今持っているものです: SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

3
Postgres部分インデックスの作成を高速化
Postgres 9.4で大きな(1.2 TB)静的テーブルの部分インデックスを作成しようとしています。 私のデータは完全に静的なので、すべてのデータを挿入してから、すべてのインデックスを作成できます。 この1.2 TBのテーブルrun_idには、データをきれいに分割するという名前の列があります。さまざまなをカバーするインデックスを作成することにより、優れたパフォーマンスを得ていますrun_id。次に例を示します。 CREATE INDEX perception_run_frame_idx_run_266_thru_270 ON run.perception (run_id, frame) WHERE run_id >= 266 AND run_id <= 270; これらの部分インデックスにより、望ましいクエリ速度が得られます。残念ながら、各部分インデックスの作成には約70分かかります。 CPUが制限されているようです(topプロセスの100%を示しています)。 部分インデックスの作成を高速化するために何かできることはありますか? システム仕様: 18コアXeon 192GB RAM RAIDに12個のSSD 自動バキュームがオフになっています maintenance_work_mem:64GB(高すぎる?) テーブル仕様: サイズ:1.26 TB 行数:10537億 一般的なインデックスサイズ:3.2GB(〜.5GBの差異があります) テーブル定義: CREATE TABLE run.perception( id bigint NOT NULL, run_id bigint NOT NULL, frame bigint …

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
psqlと--disable-triggersを使用したプレーンテキストのpg_dumpの復元
テーブルの「レガシー」データを更新するために、短いスクリプトでいくつかのテストを実行する必要がありました。 私は慎重で、テストされていないスクリプトを使用して、その前に関連テーブルをバックアップすることにしました。これを行う最も簡単な方法は次のとおりです。 pg_dump -a --file table.sql -t table database 今、私は自分がしなければならないことをし、結果を確認しましたが、それらはかなり満足のいくものではありませんでした。私は自分自身に考えました。そのテーブルのバックアップを作成することは、どれほど幸運かです。 私がテーブルをバックアップしたとき、私はすでに警告されていました: pg_dump: NOTICE: there are circular foreign-key constraints among these table(s): pg_dump: table pg_dump: You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints. pg_dump: Consider using a full dump instead of a …

1
PostgresqlでCLOB OIDのTEXT値を取得します
次のようなデータベーステーブルがあります。 テーブルの回答を作成します( id intはnullではありません。 question_id intはnullではありません、 回答テキストnull ) このテーブルは、Hibernateによって「answer」列の@Lob属性を使用して最初に作成されました。そのときは気づきませんでしたが、そのように設定すると、Hibernateは実際のテキストではなくOIDを列に格納します。HIDを使用して値を取得すると、OIDがCLOB文字列に自動的に変換されるため、すべてが正常に機能しますが、パフォーマンスの問題になり、OIDを削除したいと考えています。 回答から選択* ID QUESTION_ID ANSWER =============================== 1 123 55123 2 234 51614 3 345 56127 する必要があります ID QUESTION_ID ANSWER =============================== 1 123男性 2 234 203-555-1212 3 345 555 Main St. New York、NY 私の望みは、テーブル「ANSWER_VALUE TEXT」に追加の列を追加し、実際の値をテーブルに取得するために以下のようなことを行い、@ Lob指定子を使用しないようにHibernateを変更することです。 回答の更新セットANSWER_VALUE = getValueFromOID(ANSWER) その「getValueFromOID」関数は存在しますか?そうでない場合、どのように作成するか、少なくともOIDの実際の値をフェッチする方法について、いくつかの指針を得ることができますか? ありがとう

1
IDに行を挿入できませんが、行が存在しません
これが私が直面している奇妙な問題です。次のクエリを使用してデータを入力しようとしています insert into product_product (id, product_tmpl_id, make_equip, model_equip, name_template, serial_num_equip, location_equip, issue_date_equip, issue_to_equip, remarks_equip, pr, ch, categ_id,valuation) values (700,700,'Nikon','Action 10x50 Lookout','Nikon Action 10x50 Lookout','671386','40 Wall St.','5/13/2004 12:00:00 AM','','OM''s OFFICE',62,72,502,'manual periodic'); エラーが発生します: ERROR: duplicate key value violates unique constraint "product_product_pkey" DETAIL: Key (id)=(700) already exists. ********** Error ********** ERROR: duplicate key …

1
CTEが失われた更新を受け入れるのはなぜですか?
クレイグリンガーがコメントしたときの意味がわかりません。 挿入トランザクションがロールバックすると、このソリューションは更新が失われる可能性があります。UPDATEが行に影響を与えたことを確認するチェックはありません。 上https://stackoverflow.com/a/8702291/14731。失われた更新がどのように発生するかを示すイベントのサンプルシーケンスを提供してください(例:スレッド1がX、スレッド2がY)。

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 …

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