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

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

1
パーセンタイルを計算するための高速な一般的な方法
PostgreSQLでソートされていない列のn> 1パーセンタイルを検索したい。たとえば、20、40、60、80、100パーセンタイル。 明白な解決策は、列を数えて並べ替えてから調べますが、もっと良い解決策を期待しています。何か案は? PS私はMySQLの良い解決策を見つけましたが、それをpsqlに変換できません

1
ルールが適用された後にクエリを表示するにはどうすればよいですか?
ドキュメントから-37.3.1.1。「ステップバイステップの最初のルール」 CREATE TABLE shoelace_log ( sl_name text, -- shoelace changed sl_avail integer, -- new available value log_who text, -- who did it log_when timestamp -- when ); CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE NEW.sl_avail <> OLD.sl_avail DO INSERT INTO shoelace_log VALUES ( NEW.sl_name, NEW.sl_avail, current_user, current_timestamp ); …

4
コメントでPostgreSQLスキーマをバージョン管理する方法は?
コード、ドキュメント、システム構成など、Gitでの作業のほとんどをバージョン管理しています。私の貴重な仕事はすべてテキストファイルとして保存されているので、私はそれを行うことができます。 また、Postgresデータベース用の多くのSQLスキーマを作成して処理しています。スキーマにはビュー、SQL関数が含まれており、Postgres関数はRプログラミング言語で(PL / Rを介して)作成します。 私と共同編集者が作成したチャンクスキーマをコピーして貼り付けようとしていましたが、忘れていました。コピーと過去のアクションは反復的でエラーが発生しやすくなります。 pg_dump / pg_restoreメソッドはコメントを失うため機能しません。 理想的には、現在のスキーマを1つまたは複数のファイルに抽出し、コメントを保持してバージョン管理を行うための方法が欲しいです。 コメント付きのスキーマをバージョン管理するためのベストプラクティスは何ですか?

2
PITRを停止/無効にして、WALセグメントを安全にクリーニングするにはどうすればよいですか?
本番サーバーは、CentOSリリース5.2(最終)でPostgreSQL v8.2.3を実行しています。 PITRを本番サーバーに設定しました。いくつかの理由により、PITRをセットアップした後、それを管理および維持することができません。最終的に、WALアーカイブドライブ(セカンダリドライブ)がいっぱいになり(100%使用)、アーカイブされる追加のWALアーカイブセグメントがpg_xlog /ディレクトリ自体(プライマリドライブで利用可能)に蓄積されます。 PITRセットアップの詳細 2つのドライブがあります。 プライマリドライブ(pgsql / data /ディレクトリが存在)は400 GBです。 セカンダリドライブ(WALアーカイブ)は300 GBです。すべてのWALアーカイブは、このセカンダリドライブに書き込まれます。 現在、PITRを停止/無効にすることにしました。 私の質問は、この状況で、どのようにPITRを停止/無効にし、両方のドライブからすべてのWALセグメントを安全にクリーンアップするかです。 推奨/推奨される方法は何ですか?これに関する専門家のアドバイス/アイデア/提案は高く評価されています。

5
プロのフルタイムPostgreSQL DBAはいますか?
私の仕事では、データベースとしてPostgreSQLを使用するJavaEEアプリケーションで作業しています。データベースサーバーも管理する本番サーバー用のシステム管理者がいますが、常勤のDBAがいないので不思議です。私は、専任の専任DBAがOracleデータベースだけを操作することを想像します。私は何かを見落としているのですか、それとも専用のPostgres DBAがいないと想定して正しいのですか? PS:私は純粋な好奇心からこれを求めています。 PPS:この質問にDBAのタグを付けたかったのですが、どうやらそれは新しいタグになるでしょう。誰かがこれを作ってくれませんか?

1
WHERE句のないUPDATEはPostgreSQLのテーブルをロックしますか?
テーブル全体UPDATE(WHERE句を指定しない)はPostgreSQLのテーブルをロックしますか?たとえば、行が削除または挿入されるのを防ぎますか? たとえば、実行した場合 、実行中にUPDATE t1 SET key = 'value' 新しい行が挿入されないことを期待できますか?t1UPDATE いいえの場合UPDATE、開始後に表示された行も更新されますか?(キーのDEFAULT 'value'定義にはありません)

1
関数のボラティリティを宣言して、パフォーマンスに悪影響を与えることはできますか?
Postgresの機能を使用して宣言されている揮発性の分類VOLATILE、STABLEまたはIMMUTABLE。プロジェクトは、組み込み関数のこれらのラベルで非常に厳しいことが知られています。そして正当な理由があります。顕著な例:式のインデックスはIMMUTABLE関数のみを許可し、誤った結果を回避するためにそれらは真に不変でなければなりません。 ユーザー定義関数は、所有者の選択に従って自由に宣言できます。マニュアルは助言します: 最適化の最良の結果を得るには、関数に有効な最も厳密なボラティリティカテゴリで関数にラベルを付けてください。 ...そして、不適切なボラティリティラベルで問題が発生する可能性のあるものの広範なリストを追加します。 それでも、不変性を偽ることが理にかなっている場合があります。あなたがするとき、ほとんど知っている機能は、実際には、あなたの範囲内で不変です。例: PostgreSQLは「アクセントを区別しない」照合をサポートしていますか? データの整合性に関する考えられるすべての影響はさておき、パフォーマンスへの影響は何ですか?関数の宣言はパフォーマンスにのみ有益であると考える人もいるかもしれません。そうですか?IMMUTABLE 関数のボラティリティIMMUTABLE を宣言するとパフォーマンスが低下しますか? 現在のPostgres 10でそれを絞り込むと仮定しますが、最近のすべてのバージョンが対象です。

1
pg_trgmインデックスを使用した類似検索のクエリ時間が遅い
2つのpg_trgmインデックスをテーブルに追加しました。これは、ユーザー名、またはサインアップ中にスペルが間違っているメールアドレス( "@ gmail.con"など)でユーザーを検索する必要があるため、メールアドレスまたは名前によるあいまい検索を可能にします。ANALYZEインデックスの作成後に実行されました。 ただし、これらのインデックスのいずれかでランク付けされた検索を実行すると、ほとんどの場合非常に遅くなります。つまり、タイムアウトを長くすると、クエリが 60秒で返される場合がありますが、15秒という非常にまれな場合もありますが、通常はクエリがタイムアウトします。 pg_trgm.similarity_threshold0.3はのデフォルト値ですが、これを上げて0.8も違いはないようです。 この特定のテーブルには2,500万行以上があり、常に照会、更新、および挿入されます(それぞれの平均時間は2ミリ秒未満です)。セットアップは、汎用SSDストレージと多かれ少なかれデフォルトのパラメーターを備えたRDS db.m4.largeインスタンスで実行されているPostgreSQL 9.6.6です。pg_trgm拡張子はバージョン1.3です。 クエリ: SELECT * FROM users WHERE email % 'chris@example.com' ORDER BY email <-> 'chris@example.com' LIMIT 10; SELECT * FROM users WHERE (first_name || ' ' || last_name) % 'chris orr' ORDER BY (first_name || ' ' || last_name) <-> 'chris orr' …

1
Postgres:パラメータ付きのpsql関数に存在する場合は切り捨て
存在する場合、指定されたテーブル名を切り捨てるpsql関数を取得しようとしています。私は複数の機能を試してきましたが、どれも今のところ機能していません。ここにコードがあります: CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT) returns void as $$ BEGIN EXECUTE format( 'IF EXISTS ( SELECT * FROM information_schema.tables WHERE table_name =' || tableName || ' ) THEN TRUNCATE tableName; END IF; '); END; $$language plpgsql これで、名前を固定した簡単な手順で機能させることができます。 do $$ begin IF EXISTS (SELECT * FROM information_schema.tables WHERE table_name …

1
PostgreSQL 9.2-9.6ダウンタイムなしのアップグレード
PostgreSQL 9.2から9.6にアップグレードする必要があります。以下は私が直面している課題です。 ストリーミングレプリケーションのセットアップがあり、ストリーミングレプリケーションモードではPostgreSQLが下位バージョンから上位バージョンへのアップグレードをサポートしていないため、マスターをアップグレードするとスレーブを再構築する必要があり、3時間かかります。その時間はありません。常に1つのスレーブと1つのマスターを使用できる必要があります。ストリーミングレプリケーションを使用して、スレーブを再構築せずにアップグレードする他の方法はありますか? 論理複製を構築するために、slonyを使用することを考えましたが、slonyは自動的に複製しないという点でいくつかの制限があります。 ラージオブジェクト(BLOB)への変更 DDLコマンドによる変更 ユーザーとロールへの変更 ...そして私たちのアプリケーションには継続的な作成コマンドがあります。したがって、slonyは使用できません。 スレーブの再構築を回避し、最小限のダウンタイムでアップグレードを行い、1つのマスターと1つのスレーブの準備を整えるための提案をしてください。

2
PostgreSQL Upsertがパーティションテーブルで機能しない
次のようなテーブルがあります。 CREATE TABLE aggregated_master ( "user" BIGINT, type TEXT, date TIMESTAMP, operations BIGINT, amount NUMERIC, PRIMARY KEY ( "user", type, date ) ); このテーブルは、多くのパーティションが継承するマスターです。パーティションは、DATEフィールドのMONTHによって行われます。たとえば、Aug-2017のパーティションはagg_201708で、そのPKはpk_agg_201708になります。挿入を適切なパーティションにリダイレクトする通常のトリガーBEFORE INSERTがあります。 事は私がこのテーブルにUPSERTをしたいということです。DO CONFLICT部分が機能していません。 最初のコードはこのようなものでした INSERT INTO aggregated_master (user, type, date, oeprations, amount) SELECT user, type, date, SUM(ops), SUM(amt) FROM ... WHERE ... GROUP BY USER, TYPE, …

5
相互に排他的な多対多の関係
私はテーブル持っているcontainersいくつかのテーブルに多対多の関係を持つことができる、のは、それらがあるとしましょうplants、animalsとbacteria。各容器は、任意の数の植物、動物、または細菌を含むことができ、各植物、動物、または細菌は、任意の数の容器に入れることができる。 これまでのところ、これは非常に簡単ですが、私が問題を抱えているのは、各コンテナには同じタイプの要素のみを含める必要があるということです。たとえば、植物と動物の両方を含む混合コンテナは、データベースの制約違反になります。 これの私の元のスキーマは次のとおりでした: containers ---------- id ... ... containers_plants ----------------- container_id plant_id containers_animals ------------------ container_id animal_id containers_bacteria ------------------- container_id bacterium_id しかし、このスキーマでは、コンテナーを均一にする必要があるという制約を実装する方法を思いつきません。 これを参照整合性で実装し、データベースレベルでコンテナが同種であることを保証する方法はありますか? これにはPostgres 9.6を使用しています。

2
PostgreSQLでは、1バイトの「char」型はどの程度正確に機能しますか?
私はよく人が話して"char"いるのを見ます。使ったことがない。それはドキュメントで次のように定義されています: タイプ「char」(引用符に注意)は、1バイトのストレージのみを使用するという点でchar(1)とは異なります。これは、単純な列挙型としてシステムカタログで内部的に使用されます。 そしてさらに、 "char" 1 byte single-byte internal type それで、それが1バイトである場合、ドメインは何であり、どのようにそれを利用しますか?署名されていますか、署名されていませんか?@Erwin Brandstetterによるこの投稿では、彼はそれをレイアウトしていますが、私はまだ混乱しています。彼はand を使用してascii()おりchr()、これを提供しています SELECT i , chr(i)::"char" AS i_encoded , ascii(chr(i)::"char") AS i_decoded FROM generate_series(1,256) i; それは10から11の間で本当に奇妙なことをしています。 i | i_encoded | i_decoded -----+-----------+----------- ... 8 | \x08 | 8 9 | | 9 10 | +| 10 | | -- WTF …

2
一意の組み合わせ行を防ぐためにPostgreSQL制約を作成する
単純なテーブルがあると想像してください: name | is_active ---------------- A | 0 A | 0 B | 0 C | 1 ... | ... 次の状況で失敗する特別な一意の制約を作成する必要があります。異なるis_active値を同じname値に共存させることはできません。 許可される条件の例: 注:単純な複数列の一意のインデックスでは、このような組み合わせは許可されません。 A | 0 A | 0 B | 0 許可される条件の例: A | 0 B | 1 失敗した状態の例: A | 0 A | 1 -- should be prevented, …

2
バッファーページの1/3より大きい値はインデックス付けできません
私はDBがあまり得意ではないので、我慢してください。 非常に長いJSONデータをテーブルに配置しようとしています。このテーブルはDjangoフレームワークによって作成されました。 HerokuでPostgresを使用しています。したがって、データを配置しようとすると、次のエラーが発生します。 File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) psycopg2.OperationalError: index row size 3496 exceeds maximum 2712 for index "editor_contentmodel_content_2192f49c_uniq" HINT: Values larger than 1/3 of a buffer page cannot be indexed. Consider a function index of an MD5 hash of the value, or use full text …

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