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

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

1
postgresqlの一貫したバックアップのためのストレージスナップショット-異なるデータおよびログボリューム
私たちは多くのLinux VMをvmware /共有ストレージ環境で実行しており、それぞれが独自のpostgreSQLインスタンス(9.0と9.3の混合)を実行しています。現在、VM全体が単一のルートパーティション/ボリューム上にあり、基盤となるVMFSボリュームのストレージベースのスナップショットをバックアップ/復元プロセス(および私たちのDRサイトへのレプリケーション)に使用することで大きな成功を収めています(約8年)。 ストレージのアーキテクチャーにより、postgres WALファイルをキャッシュされていない、大部分が書き込みボリュームに分離して、ストレージ側でのキャッシュチャーンを少なくすることが有利です。ストレージ(Nimble Storage)を使用すると、両方のボリュームを単一の保護/スナップショットグループに割り当てることができますが、スナップショットが保護グループ内のすべてのボリュームでまったく同時に発生することをベンダーから引き出すことができませんでした-可能性は高いですが、ミリ秒単位で離れている可能性は常にあります。 そのために、pg_benchを使用して可能な限り高速にデータをDBに書き込みながら、いくつかの実験を行いました。実験後、スナップショットのボリュームを復元し、VM + postgresを起動しました データボリュームとログボリュームの両方をほぼ同時にスナップショット作成-結果:DBが回復 最初にスナップショットデータボリューム、〜1分後にログボリューム-結果:DBが回復しました 最初にスナップショットログボリューム、約1分後にデータボリューム-結果:DBが回復しました WALチェックポイントがデータファイルに新しいデータを書き込んだ後、最初にスナップショットログボリューム、約3分後にデータボリューム:結果:DBが回復しました したがって、両方のスナップショットがボリュームレベルで一貫しており、比較的近い距離にある限り、WAL /ログボリュームのスナップショットの時間に基づいて、DBの一貫したコピーが得られます。 私の質問:これは安全ですか?テストで欠落している主なケースは何ですか?また、何が問題になる可能性がありますか? Postgresのドキュメントはこれが安全ではないことを示していますが、テストはかなり堅牢であることを示しているようです:http : //www.postgresql.org/docs/9.1/static/backup-file.html データベースが複数のファイルシステムに分散している場合、すべてのボリュームの正確に同時に凍結されたスナップショットを取得する方法がない場合があります。たとえば、データファイルとWALログが異なるディスク上にある場合、またはテーブルスペースが異なるファイルシステム上にある場合、スナップショットは同時でなければならないため、スナップショットバックアップを使用できない場合があります。このような状況でコンシステントスナップショット手法を信頼する前に、ファイルシステムのドキュメントをよく読んでください。 注:はい、PostgreSQLをホットバックアップモードにしたり、ストレージのVMware統合を使用してVM自体を静止したりするなど、一貫性を確保する他のオプションについては知っていますが、スピードと利便性のためにストレージのみのソリューションを探しています。クライアントへの影響はゼロです。

3
メールアドレスは一意ですか、それとも主キーですか?
私はデータベースの初心者です。文字列の比較が遅く、複雑な結合のパフォーマンスに影響するため、メールアドレスを主キーとして使用することはおそらく良いアイデアではないことがわかりました。メールを変更すると、すべての外部キーを変更する必要があり、多くのことを必要とします。努力の。 しかし、私のユーザーテーブルですべてのユーザーがメールアドレスを持っている必要があり、それらのメールアドレスはそれぞれ一意である必要がある場合、メール列に一意のインデックスを追加するだけで十分ですか?Afaikの一意のフィールドではnull値が許可されているため、私はすべてのユーザーがnull値を許可せずに電子メールアドレスを持っている必要があります。ここで見逃しているものはありますか?または、電子メール列を一意にし、サーバーでのデータ検証中に、ユーザーが電子メールアドレスを入力してすべてのユーザーが1つ持つことを確認するとしますか?

2
大きなテーブルでのインデックススキャンが遅い
PostgreSQL 9.2を使用すると、比較的大きなテーブル(2億を超える行)でクエリが遅くなるという問題が発生します。クレイジーなことは何もしていません。単に歴史的な価値を加えているだけです。以下は、クエリとクエリプランの出力です。 私のテーブルレイアウト: Table "public.energy_energyentry" Column | Type | Modifiers -----------+--------------------------+----------------------------------------------------------------- id | integer | not null default nextval('energy_energyentry_id_seq'::regclass) prop_id | integer | not null timestamp | timestamp with time zone | not null value | double precision | not null Indexes: "energy_energyentry_pkey" PRIMARY KEY, btree (id) "energy_energyentry_prop_id" btree (prop_id) …

1
ビジーテーブルが掃除機にかけられていません
WindowsではPostgres 9.2を使用して低頻度の時系列データを保存しています。毎秒約2000行を毎秒24時間、週7日、ダウンタイムなしで挿入しています。あるDELETE日の固定数にテーブルの長さを保つためにテーブルの上におき、10分ほどにこれが実行されます。これはかなり安定した9億行になります。(興味のある方のために、SELECT、INSERT、DELETEすべてのパフォーマンスです)。 そのためDELETE、行を削除してもディスク領域は解放されません。そのためVACUUMに実行する必要があります。 私はしました照会pg_stat_user_tablesとVACUUM、これまで実行していないように見えます。 さまざまなドキュメントから理解できること(http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html): 自動バキュームがオンになっているようで、他のテーブルで実行されています。 auto-vacuumは実行されませんFULL。また、テーブルの排他ロックは必要ありません。 自動バキュームが実行されていない理由はありますか?これは純粋にテーブルが常にビジーであるためですか? そして、この場合はVACUUM毎回実行する価値がありますDELETE(10分ごとに実行されます)? 編集: 以下のSOリンクからSQLを使用してクエリを実行します。 -[ RECORD 2 ]---+--------------------------- schemaname | stats relname | statistic_values_by_sec last_vacuum | last_autovacuum | n_tup | 932,315,264 dead_tup | 940,727,818 av_threshold | 186,463,103 expect_av | * 生の出力: -[ RECORD 3 ]-----+--------------------------- relid | 501908 schemaname | stats relname | …

1
データチェックサムはストリーミングレプリケーションとどのように相互作用しますか?
データチェックサムは、9.3で導入された新機能であり、 新しいGUCパラメータ "ignore_checksum_failure"があり、破損が検出された場合でもPostgreSQLにトランザクションの処理を継続させます。 レプリケーションマスターでチェックサムエラーが発生した場合、破損したデータがスレーブにレプリケートされるか、レプリケーションが停止します。の設定に依存しignore_checksum_failureますか? この READMEには有用な関連情報がいくつかありますが、質問には直接回答しません。

1
数時間のPostgreSQLトランザクションコミット
ユーザーからPostgreSQLサーバーへの2つの接続があり、約4時間実行され、かなりの時間(少なくとも1時間はそれを監視していた)コミット状態になっているという問題が発生しています。 。これらの接続は他のクエリの実行をブロックしていますが、それ自体はブロックされていません。 問題の2つの関係を次に示します。 postgres=# select * from pg_stat_activity where usename = 'xxxxx'; datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port -------+---------+---------+----------+---------+---------------+---------+-------------------------------+-------------------------------+-------------------------------+---------------+------------- 20394 | xxxxxx | 17509 | 94858 | xxxxx | COMMIT | f | …

1
PostgreSQL 8.4でトリガー関数を実行するために必要な権限は何ですか?
PostgreSQL 8.4でトリガー関数を実行するために必要な権限は何ですか? ロールに設定された権限は、トリガー機能を実行する上で重要ではないようです。トリガー関数を実行するために必要な特権はEXECUTE特権であるが、トリガー関数を呼び出すトリガーを起動するアクションを実行する実際のロールではなく、テーブルの所有者にとってある日を見たことがあります。 その点を説明するドキュメント部分が見つかりません、何か助けはありますか?

1
Postgresでウィンドウ関数の集計を取得するにはどうすればよいですか?
次のように、整数配列の置換/組み合わせの2つの列を含むテーブルと、値を含む3番目の列があります。 CREATE TABLE foo ( perm integer[] NOT NULL, combo integer[] NOT NULL, value numeric NOT NULL DEFAULT 0 ); INSERT INTO foo VALUES ( '{3,1,2}', '{1,2,3}', '1.1400' ), ( '{3,1,2}', '{1,2,3}', '0' ), ( '{3,1,2}', '{1,2,3}', '1.2680' ), ( '{3,1,2}', '{1,2,3}', '0' ), ( '{3,1,2}', '{1,2,3}', '1.2680' ), ( …

1
postgresqlトランザクションログのフラッシュをリクエストするにはどうすればよいですか?
次の問題があります。「垂直」Linuxディストリビューション(Sophos UMT)には、PostgreSQL 9.2の設定を保存するためのものが付属しています。残念ながら、前回の更新以降、一部のインスタンスのトランザクションログ(WAL)がフラッシュされずに増大しているようです。これにより、pg_xlogフォルダーがベースフォルダーよりも数桁大きくなります。 私は現在、デリケートな状況にあります。WALファイルの過度の増大により、これらのマシンの1つ(VM)のディスクが月曜日の前に満杯になります。私は既にベンダーとのサポートケースを開いていますが、これまでのところ、あまり役に立ちません(より大きなディスクでVMを再構築することをお勧めします)。 ソフトウェアが別の方法でバックアップを実行しているため(このデータベースには独自のバックアップ手順があり、バックアップファイルを電子メールで送信するため)、このデータベースはバックアップされません。これが、WAFが非常に大きくなる理由だと思います。 私はPostgreSQLのエキスパートではないため、ばかげた質問や明らかな質問をしている可能性が高いですが、WALファイルのフラッシュを要求する手順は何ですか? 理想的には、問題のあるシステムでこれらのWALファイルをフラッシュして、ベンダーがより適切な修正を発行するのに十分な時間を確保するための手順を探しています。 編集:要求どおり、SELECT version();クエリの出力は次のとおりです。 PostgreSQL 9.2.4 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit (1列) そしてSELECT name, current_setting(name), source FROM pg_settings WHERE source NOT IN ('default', 'override');クエリ hot_standby | on | configuration file listen_addresses | * | configuration file log_destination | …
11 postgresql 

2
最長の接頭辞を見つけるアルゴリズム
テーブルが2つあります。 最初のものは接頭辞を持つテーブルです code name price 343 ek1 10 3435 nt 4 3432 ek2 2 2つ目は、電話番号を含む通話記録です number time 834353212 10 834321242 20 834312345 30 各レコードのプレフィックスから最長のプレフィックスを見つけるスクリプトを作成し、このすべてのデータを次のように3番目のテーブルに書き込む必要があります。 number code .... 834353212 3435 834321242 3432 834312345 343 番号834353212の場合、「8」をトリミングしてから、プレフィックステーブルから最長のコードである3435 を見つける必要があります。常に最初に「8」を削除し、プレフィックスを先頭に置く必要があります。 私は非常に悪い方法でずっと前にこの課題を解決しました。これは、各レコードに対して多くのクエリを実行する恐ろしいperlスクリプトでした。このスクリプト: 呼び出しテーブルから数値を取得し、ループ内でlength(number)から1 => $ prefixまでの部分文字列を実行します クエリを実行します: '$ prefix'のようなコードのプレフィックスからcount(*)を選択します count> 0の場合、最初のプレフィックスを取得してテーブルに書き込みます 最初の問題はクエリ数です- call_records * length(number)です。第二の問題はLIKE表現です。遅いと思います。 私は2番目の問題を解決しようとしました: …

1
Postgres:count(*)とcount(id)
私が見た中でのドキュメントの違いをcount(*)してcount(pk)。の存在を知らないままcount(pk)(pkはSERIAL PRIMARY KEY)を使用していたcount(*)。 私の質問はPostgresの内部最適化についてです。SERIAL PRIMARY KEYすべての行にa が存在し、偽になることはなく、行をカウントするだけであることをピックアップするのに十分スマートですか?それとも各行に対して冗長な述語チェックを行いますか?これはおそらく無意味な最適化では多すぎると私は同意しますが、私は興味があるだけです。 私はの出力で見ていたEXPLAINとEXPLAIN VERBOSEのためにcount(*)、count(id)そしてcount(id > 50)かどうかを確認するためにEXPLAIN、その出力に述語をチェック述べました。そうではありません。

1
エラー:セットを受け入れることができないコンテキストで呼び出されたset_valued関数。どんな内容ですか?
私はubuntu 12.04でPostgresql 9.1を使用しています。 私の質問へのクレイグの回答に触発されたsetofタイプまたはsetofレコードの連結私はreturn query、setof recordこのplpgsql関数に、、およびシリーズジェネレーターを使用するとうまくいくと思いました: create or replace function compute_all_pair_by_craig(id_obj bigint) returns setof record as $$ begin return query select o.id, generate_series(0,o.value) from m_obj as o; end; $$ language plpgsql; 実行中にエラーが発生します: ERROR: set_valued function called in context that cannot accept a set なにが問題ですか ?Craigとは逆に、関数に返すように指示しますsetof record。 私はCraigとまったく同じように機能する何かを実現できます。つまり、型create type pair_id_value as …

3
インデックススキャンではなくPostgreSQL順次スキャンなぜですか?
こんにちは、私はPostgreSQLデータベースクエリに問題があり、誰かが手伝ってくれるかどうか疑問に思っています。いくつかのシナリオでは、私のクエリは、2つのテーブルdataとを結合するために使用した、私が作成したインデックスを無視しているようdata_areaです。これが発生すると、シーケンシャルスキャンが使用され、クエリが非常に遅くなります。 順次スキャン(〜5分) Unique (cost=15368261.82..15369053.96 rows=200 width=1942) (actual time=301266.832..301346.936 rows=153812 loops=1) CTE data -> Bitmap Heap Scan on data (cost=6086.77..610089.54 rows=321976 width=297) (actual time=26.286..197.625 rows=335130 loops=1) Recheck Cond: (datasetid = 1) Filter: ((readingdatetime >= '1920-01-01 00:00:00'::timestamp without time zone) AND (readingdatetime <= '2013-03-11 00:00:00'::timestamp without time zone) AND (depth >= 0::double …

1
PostgreSQL pg_stat_activityはCOMMITを示します
最近、データベースサーバーを、4 xクアッドコアCPUと32GbのRAMを備えたアップグレードされたマシンに置き換えました。また、古いボックスを再利用して、ストリーミングレプリケーションのスレーブとして機能させました。どちらのボックスもCentOS 6.3とPostgreSQL 9.2を実行しています。Postgresは、各ボックスで実行されている唯一のものです。 この構成は約1か月ほど前から行われていましたが、トラフィックが増加し始めたときに突然、いくつかの問題が発生し始めました。私たちが見始めているのは、ときどき非常に高いCPU負荷であり(上部は270の負荷平均を示しています)、pg_stat_activityこれを見ると、ほとんどの接続がCOMMIT状態にあることがわかります。そのままにしておくと、これは最終的に終了し、システムは接続がになるのに応答しIDLEます。レプリケーションを無効にして、それが問題であるかどうかを確認しましたが、問題は解決しません。 何が起こっているのかを診断してみましたが、少し迷っています。実行からの出力はperf、以下のようなものを示しており、私は何を0x347ba9表しているのかわかりません。 + 41.40% 48154 postmaster 0x347ba9 f 0x347ba9 ◆ + 9.55% 10956 postmaster 0x2dc820 f set_config_option ▒ + 8.64% 9946 postmaster 0x5a3d4 f writeListPage + 5.75% 6609 postmaster 0x5a2b0 f ginHeapTupleFastCollect ▒ + 2.68% 3084 postmaster 0x192483 f build_implied_join_equality ▒ + 2.61% 2990 postmaster 0x187a55 …
11 postgresql 

2
postgresql pg_ *コマンドの特定のバージョン(8.4、9.1)を実行する方法(例:pg_dump)
Postgresqlバージョン8.4および9.1がインストールされています。特定のPostgresqlコマンドについて、実行するコマンドの特定のバージョンを指定するにはどうすればよいですか?(例えば、psql、pg_dump、pg_ctlcluster、pg_restore、...) 私の質問は、8.4から9.1へのアップグレードの準備としてpg_dumpを実行したいという動機であり、実行しているpg_dumpのバージョンを知りたいです。 Ubuntu 10.04 Nattyで実行しています。

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