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

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

4
接続ごとの一時的なスキーマ?
単体テストをH2からPostgresqlに移行しようとしています。 現在、H2は、各接続が一意のスキーマにマップされ、テーブルが作成され、テストが実行され、スキーマが削除されるように、メモリ内スキーマを提供します。スキーマの作成と破棄は、H2によって自動的に処理されます。 単体テストは同時に実行されます。 Postgresqlでこれを行う最良の方法は何ですか?具体的には 接続ごとに一意のスキーマを取得するにはどうすればよいですか? テストフレームワークは一意の名前を生成する必要がありますか、またはこれを行うための組み込みメカニズムはありますか? 接続がドロップされたときにスキーマが確実にドロップされるようにするにはどうすればよいですか? 単体テストが終了したときにスキーマがぶら下がってしまいたくありません。 どのようなアプローチで最高のパフォーマンスが得られますか? 1秒あたり数十のスキーマを作成/ドロップする必要があります。 更新:ここで関連する回答を見つけましたが、単体テストを実行しているプロセスが強制終了された場合にスキーマを削除できません。

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は非常に詳細なので、すべてを完了するには長い時間がかかります(そして私には期限があります)

2
使用されていないがクエリに影響を与えるインデックス
いくつかの数値といくつかの追加データを含むPostgreSQL 9.3テーブルがあります。 CREATE TABLE mytable ( myid BIGINT, somedata BYTEA ) このテーブルには現在約1,000万のレコードがあり、1GBのディスク容量を使用します。myid連続していません。 100000の連続番号の各ブロックにある行の数を計算したいと思います。 SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; これは約3500行を返します。 クエリプランでまったく言及されていなくても、特定のインデックスが存在すると、このクエリが大幅に高速化されることに気づきました。インデックスなしのクエリプラン: db=> EXPLAIN (ANALYZE TRUE, VERBOSE TRUE) SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=1636639.92..1709958.65 …

2
PostgreSQL 8.4でインデックスを再作成する前に、常にVACUUM ANALYZEを行う必要がありますか?
毎日早朝にpgAgentジョブがPostgreSQL 8.4データベースのテーブルBからテーブルAの内容を更新します。テーブルAには、91列にまたがる約140kのレコードが含まれ、2つのインデックスがあります。1つはPRIMARY KEYの一部として、もう1つはPOINT PostGISジオメトリ列のGISTインデックスです。 プロセスを少し速くするために、ジョブはテーブルAのレコードを削除してテーブルBからレコードを挿入する前に、ジオメトリ列のインデックスを削除し、その後インデックスを再作成します。これがすべて完了すると、autovacuumデーモンは、希望どおりに動作するようになります(ジョブの統計情報とテーブルの統計情報をジョブの完了時間とautovacuumの実行時間と比較して10分ほど後)。 これがすべて起こった後の今朝のテーブルのチェック時に、テーブルの統計から、テーブルサイズは272MB、TOASTテーブルサイズは8192バイト、インデックスサイズは23MBであることがわかりました。これはかなり大きいように見えたので、テーブルにREINDEXコマンドを発行し、インデックスサイズは9832kBになりました。 私の質問はこれです: インデックス(または少なくともジオメトリ列インデックス)を最初から作成したときに、REINDEXがインデックスのサイズを大幅に削減するのはなぜですか?インデックスが作成される前に、テーブルがバキューム/分析されていることを確認する必要がありますか?主キーのインデックスを削除することがこれの要因ではありませんか?何が欠けていますか?

1
PostgreSQLのJSON []配列から既知の要素を削除する方法は?
PostgreSQLでのJSONデータ型の使用に関する問題に直面しています。非正規化されたJavaモデルをDBに格納しようとしています。モデルは複雑なオブジェクトのリストを備えています。そのため、これらをネイティブのPostgreSQL配列でJSONとしてモデル化することにしました。 これは私のテーブル作成ステートメントの抜粋です: CREATE TABLE test.persons ( id UUID, firstName TEXT, lastName TEXT, communicationData JSON[], CONSTRAINT pk_person PRIMARY KEY (id) ); ご覧のとおり、それはJSONで通信データオブジェクトのリストを備えた人物です。そのようなオブジェクトの1つは次のようになります。 {"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"} PostgreSQLのarray_appendを使用して、このようなJSONオブジェクトを配列に簡単に追加できます。ただし、既知の値をアレイから削除できません。次のSQLステートメントについて考えてみます。 UPDATE test.persons SET communicationData = array_remove( communicationData, '{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON ) WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d'; これはで失敗しERROR: could not identify …

4
数百万行の分類されたデータやSQLマジックを保存しますか?
私のDBAの経験は、単純なストレージ+ CMSスタイルのデータの取得よりもはるかに進んでいないため、これはばかげた質問かもしれませんが、わかりません! 特定のグループサイズと特定の期間内の特定の日数の休日価格を検索または計算する必要があるという問題があります。例えば: 1月のいつでも2人で4泊できるホテルの部屋はいくらですか。 たとえば、5000のホテルの料金と空き状況のデータは次のように保存されています。 Hotel ID | Date | Spaces | Price PP ----------------------------------- 123 | Jan1 | 5 | 100 123 | Jan2 | 7 | 100 123 | Jan3 | 5 | 100 123 | Jan4 | 3 | 100 123 | Jan5 | 5 | 100 …

1
CTE INSERTの結果を使用して一意のID値を提供するINSERT
古いデザインのデータを新しいデザインに変換するジョブを書いています。このプロセスでは、挿入から別のテーブルへのIDを取得し、それをターゲットテーブルへの挿入で使用する必要があります。 CREATE TABLE t1 { t1_id BIGSERIAL, col1 VARCHAR }; CREATE TABLE t2 { t2_id BIGSERIAL, col2 VARCHAR, -- renamed from col1 to avoid confusion t1_id BIGINT REFERENCES t1.t1_id }; 次の形式に一致するSQLが定義されています。 WITH ins AS ( INSERT INTO t1 (t1_id) VALUES (DEFAULT) RETURNING t1_id ) INSERT INTO t2 (col1, t1_id) SELECT …

1
フィールド名のみが指定されたNEWまたはOLDフィールドにアクセスする方法は?
検証トリガーを書いています。トリガーは、配列の合計が別のフィールドと等しいことを検証する必要があります。この検証には多くのインスタンスがあるため、単一のプロシージャを記述して、チェックするフィールドのセットがそれぞれ異なる複数のトリガーを作成します。 たとえば、次のスキーマがあります。 CREATE TABLE daily_reports( start_on date , show_id uuid , primary key(start_on, show_id) -- _graph are hourly values, while _count is total for the report , impressions_count bigint not null , impressions_graph bigint[] not null -- interactions_count, interactions_graph -- twitter_interactions_count, twitter_interactions_graph ); 検証では、それを確認する必要がありますimpressions_count = sum(impressions_graph)。 NEWplpgsql内からフィールドに動的にアクセスする方法がわからないので、行き詰まっています。 CREATE FUNCTION validate_sum_of_array_equals_other() …


2
postgresqlのデータベース整合性チェッカー
PostgreSQLにDBCC(データベース整合性チェッカー)コマンドはありますか?SQLサーバーのDBCCコマンドは見つかりましたが、Postgresは見つかりませんでしたか?postgresqlにはパフォーマンス調整の機能が組み込まれており、postgresで使用できるDBCCコマンドはないことを読みました。本当ですか?

3
複数挿入トランザクションでIDを参照する方法は?(postgres)
テーブル "entity.eid"が自動インクリメントであると仮定すると、同じトランザクションで後で割り当てられた自動インクリメント値を参照できるようにしたいと思います。私がこれを行っている方法は、私が最適ではないと思う複数のトランザクションを実行することです。 START TRANSACTION; INSERT INTO entity ...; INSERT INTO t2 (eid, ...) VALUES (?NEW EID REF HERE?, ...), (...), (...); COMMIT;

1
pgadmin3からのpg_restoreエラー-Postgresql
pgadmin3ツールを使用して、system1からpostgresql dbのバックアップを作成しました。作成されたバックアップファイルの拡張子は「.backup」です。 postgresql 9.0とpgadmin3 1.8がインストールされている別のシステム2に復元しようとしていますが、エラーが発生します クエリを実行できませんでした:エラー:認識されない構成パラメーター "lock_timeout"コマンドは次のとおりです:SET lock_timeout = 0; 両方のシステムの構成 system1 win7-64bit postgresql 9.0.13-1-64bit pgadmin 1.8 system2 win7-32​​ビットpostgresql 9.0.13-1-32ビットpgadmin 1.8

1
Postgres 9.1.6エラーインデックスのブロック0に予期しないゼロページが含まれています
私は、Debianサーバーで実行されているPostgres 9.1.6でストリーミングレプリケーションをセットアップしましたが、問題なく動作します。 レプリカDBでクエリを実行しようとすると、以下のエラーが発生します。 ERROR: index "tbl_cust_id_idx" contains unexpected zero page at block 0 HINT: Please REINDEX it. このエラーの原因は何ですか? 質問は/programming/17865135/postgres-9-1-6-error-index-contains-unexpected-zero-page-at-block-0にも投稿されています

1
一時データ用のPostgreSQLの最適化
非常に揮発性の高いデータを保持する整数型の100〜300列のテーブルがいくつかあります。データセットは1つまたは2つの主キーでキー設定され、更新が発生すると、データセット全体が削除され、新しいデータが1つのトランザクションに挿入されます。データセットのサイズは通常数百行ですが、極端な場合には最大数千行になることがあります。更新は1秒に1回行われ、さまざまなキーのデータセットの更新は通常ばらばらであるため、テーブルの削除と再作成は実行できません。 そのような負荷を処理するようにPostgresをどのように調整しますか?違いがある場合は、最新かつ最高のバージョンを使用できます。

2
PostgreSQL:すべてのスキーマでDDLを実行する
マルチテナントDBセットアップを行っており、いくつかの列を追加する必要があります。ユーザーをパーティション分割するためにスキーマ(およびsearch_path)を使用しているので、すべてのデータベースにDDLスキーマの変更を適用するユビキタスな方法を探しています。最初は、単一のクエリ(pg_catalogのカーソル)として実行できるかもしれないと思っていましたが、コマンドラインでの呼び出しがpsql -f望ましい方法かもしれません。

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