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

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

2
制約-1つのブール行はtrue、他のすべての行はfalse
列があります: standard BOOLEAN NOT NULL 1つの行をTrueに、その他の行をすべてFalseに強制したいと思います。この制約に応じて、FKやその他のものはありません。私はplpgsqlでそれを達成できることを知っていますが、これは大槌のようです。CHECKまたはUNIQUE制約のようなものを好みます。シンプルなほど良い。 1つの行はTrueでなければなりませんが、すべてFalseにすることはできません(したがって、最初に挿入された行はTrueである必要があります)。 行を更新する必要があります。つまり、すべての行が最初にFalseに設定され、その後に1つの行がTrueに設定される可能性があるため、更新が完了するまで制約を確認するのを待つ必要があります。 そこの間にFKがあるproducts.tax_rate_idとtax_rate.id、それはデフォルトまたは新製品を作成する容易にするために、ユーザが選択可能で、標準税率、とは何の関係もありません。.. 重要な場合はPostgreSQL 9.5。 バックグラウンド 表は税率です。税率の1つがデフォルトです(standardデフォルトはPostgresコマンドであるため)。新しい商品が追加されると、標準の税率が商品に適用されます。がないstandard場合、データベースは推測またはすべての種類の不要なチェックを実行する必要があります。簡単な解決策は、があることを確認することだと思いましたstandard。 上記の「デフォルト」とは、プレゼンテーション層(UI)を意味します。デフォルトの税率を変更するためのユーザーオプションがあります。GUI /ユーザーがtax_rate_idをNULLに設定しないようにするために追加のチェックを追加するか、デフォルトの税率を設定する必要があります。


1
PostgreSQL 9.6の望ましくないネストループとハッシュ結合
PostgreSQL 9.6のクエリ計画に問題があります。私のクエリは次のようになります: SET role plain_user; SELECT properties.* FROM properties JOIN entries_properties ON properties.id = entries_properties.property_id JOIN structures ON structures.id = entries_properties.entry_id WHERE structures."STRUKTURBERICHT" != '' AND properties."COMPOSITION" LIKE 'Mo%' AND ( properties."NAME" LIKE '%VASP-ase-preopt%' OR properties."CALCULATOR_ID" IN (7,22,25) ) AND properties."TYPE_ID" IN (6) 上記で使用したテーブルに対して行レベルのセキュリティを有効にしています。 を使用するset enable_nestloop = Trueと、クエリプランナーはネストループを実行し、合計実行時間は約37秒になります。https://explain.depesz.com/s/59BR をset enable_nestloop …

3
pg_restore:[archiver]はファイルヘッダーにマジックストリングを見つけられませんでした
私はPostgreSQL 9.1を使用していて、pg_dump次のコマンドで生成されたバックアップファイルを復元したい: sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name このコマンドは、既存のデータベースオブジェクトの削除で始まる有効なsqlファイルを生成し、次にすべてのテーブルを生成し、インジタイズ、シーケンスなどを行い、最後にデータを挿入します。 生成されたバックアップファイルを復元しようとすると、次のようになります(表示目的でのみ改行が追加されます)。 sudo pg_restore -d database_name -h 127.0.0.1 -U postgres --format=c --clean --create out.sql 失敗して出力します: pg_restore: [archiver] did not find magic string in file header その理由は何ですか?

2
PostgreSQL:特定のテーブルにアクセスするすべてのストアド関数を一覧表示する方法
前書き: 廃止された、使用されていないなど、数百のストアド関数を含むPostgreSQLデータベース 問題 テーブル構造を変更したいので、テーブルXと関係のあるすべてのストアド関数を見つける必要があります。一部は使用されていない可能性があるため、コードを確認するだけではそれを行うことはできません。 ATMを使用するソリューションは、psql \df+とgreppingの出力を実行していますが、情報スキーマを使用するなど、よりデータベースに似たソリューションを使用したいと思います。これは間違いなく繰り返しの多い作業になるので、きれいにしてください。 助言がありますか?

3
CASEを使用してUPDATEクエリの列を選択しますか?
次のようCASEに、SELECTクエリに表示する列を選択するために使用できます(Postgres)。 SELECT CASE WHEN val = 0 THEN column_x WHEN val = 1 THEN column_y ELSE 0 END AS update, ... UPDATEPostgresでクエリを実行するときに、同様のことは可能ですか(更新する列を選択してください)。私はこれについて何も見つけることができなかったのではないと思いますが、誰かが賢い代替手段を持っていると思います(手順を使用するか、CASEを使用して各列を更新して、列の値に新しい値を割り当てるか、単に既存の列を再割り当てするかを決定する以外に値)。簡単な選択肢がない場合は、もちろんそれも答えとして受け入れます。 追加情報:私の場合、更新される可能性のある14の潜在的な列があり、一致する行ごとに1つだけが更新されます(更新されるテーブルはクエリで別のテーブルと結合されます)。更新する行の量はおそらく異なり、数十または数百になる可能性があります。結合条件の指標は整っていると思います。

2
PostgreSQLでDISTINCT ONを高速化する方法は?
station_logsPostgreSQL 9.6データベースにテーブルがあります。 Column | Type | ---------------+-----------------------------+ id | bigint | bigserial station_id | integer | not null submitted_at | timestamp without time zone | level_sensor | double precision | Indexes: "station_logs_pkey" PRIMARY KEY, btree (id) "uniq_sid_sat" UNIQUE CONSTRAINT, btree (station_id, submitted_at) それぞれlevel_sensorについてsubmitted_at、に基づいて最後の値を取得しようとしていますstation_id。固有のstation_id値は約400 個、1日あたり約20,000行station_idです。 インデックスを作成する前に: EXPLAIN ANALYZE SELECT DISTINCT ON(station_id) …


1
PostgreSQLの複数の主キー
次の表があります。 CREATE TABLE word( word CHARACTER VARYING NOT NULL, id BIGINT NOT NULL, repeat INTEGER NOT NULL ); ALTER TABLE public.word OWNER TO postgres; ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id); 次のコマンドを使用して復元しようとすると: psql -U postgres -h localhost -d word -f word.sql それは私にこのエラーを与えます: テーブル「単語」の複数の主キーは許可されていません postgresで複数の主キーを使用するにはどうすればよいですか?

3
2つのプロセスが同時にマテリアライズドビューを同時にリフレッシュしようとするとどうなりますか?
ドキュメントによると: マテリアライズドビューの同時選択をロックアウトせずに、マテリアライズドビューを同時に更新します。(...) ...その他のコンテンツ... でも、このオプションを使用して一度に一つだけREFRESHは、任意のに対して実行可能 マテリアライズド・ビューは1。 私が持っていたそれをリフレッシュするマテリアライズド・ビューの最後のリフレッシュ時間を確認機能をして、60秒以上が経過した場合、それがでしょう。 しかし、2つの別々のプロセスから同時にマテリアライズドビューを更新しようとするとどうなりますか?彼らはキューに入れますか、それともエラーを上げますか? MATERIALIZED VIEWが更新されていることを検出して、触れないようにする方法はありますか? 現在、私は(設定リフレッシュする前に、テーブルのレコードを移入するために頼ってきたrefreshingしtrue)、その後にそれを設定するfalseプロセスが終了したとき。 EXECUTE 'INSERT INTO refresh_status (last_update, refreshing) VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id; EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view'; EXECUTE 'UPDATE refresh_status SET refreshing=false WHERE id=$1' USING refresh_id; その後、このプロシージャを呼び出すたびに、最新の値last_updateとそのrefreshing値を確認します。refreshingtrueの場合、マテリアライズドビューを更新しようとしないでください。 EXECUTE 'SELECT extract(epoch FROM now() - (last_update))::integer, refreshing FROM refresh_status ORDER …

1
PostgreSQLで(AUTO)VACUUMプロセスをキャンセルすると、すべての作業が無駄になりますか?
場合によっては、大量のを作成した後update、insertまたはdeleteテーブルからVACUUM FULL ANALYZE、DBが肥大化していないことを確認するためにを開始しました。本番データベースでこれを行うと、長期間テーブルをブロックすることができたため、これは良いアイデアではなかったことがわかりました。それで、私はプロセスをキャンセルしました、多分ちょうどVACUUM(完全ではない)試みたか、AUTOVACUUMそれができることは何でも後でやらせ​​ます。 問題は、VACUUMまたはAUTOVACUUMを「途中」で停止すると、すでに実行されたすべての処理が失われるのですか? たとえば、VACUUMすでに100万のデッド行が見つかって停止した場合、この情報はすべて失われますか?VACUUMは完全にトランザクション的な方法で動作しますか(非常に多くのPostgreSQLプロセスのように、「すべてまたは何もない」)? すべての作業を失うことなくVACUUMを安全に中断できる場合、vacuum作業を段階的に行う方法はありますか?[100 ms動作し、停止し、10 ms待機して、残りの世界をブロックしないようにします...]。autovacuumパラメータを調整することでこれの一部を実行できることはわかっていますが、これをプログラムで制御できること、特定の時間/特定の条件下でそれを実行できるようにすることについて考えています。 注:プロセスを停止/キャンセル/強制終了するとは、次のことを意味します。 pgAdminを使用している場合は、[クエリのキャンセル]ボタンを押します。 プログラムで作業する場合は、pg_cancel_backend()を呼び出します。 どちらも同等だと思います。シェル/システムレベルのkillコマンドは使用していません。

2
Postgresの「遷移テーブル」とは何ですか?
Postgres 10の新機能を説明するページには、「トリガー用の移行テーブル」が記載されています。 トリガーの遷移表 この機能はAFTER STATEMENT、必要に応じて古い行と新しい行をクエリに公開することにより、トリガーを有用かつ高性能にします。この機能の前は、AFTER STATEMENTトリガーはこれらに直接アクセスできませんでした。回避策はビザンチンであり、パフォーマンスが低下していました。多くのトリガーロジックをとして記述できるようになりAFTER STATEMENT、FOR EACH ROWトリガーが必要とする各行で高価なコンテキストスイッチを行う必要がなくなりました。 遷移表とは何ですか?

3
非常に遅い単純なJOINクエリ
シンプルなDB構造(オンラインフォーラム用): CREATE TABLE users ( id integer NOT NULL PRIMARY KEY, username text ); CREATE INDEX ON users (username); CREATE TABLE posts ( id integer NOT NULL PRIMARY KEY, thread_id integer NOT NULL REFERENCES threads (id), user_id integer NOT NULL REFERENCES users (id), date timestamp without time zone NOT NULL, …

2
[FROM x、y]はPostgresで何を意味しますか?
Postgresを始めたばかりです。このドキュメントを読んで、私はこのクエリに出会いました: SELECT title, ts_rank_cd(textsearch, query) AS rank FROM apod, to_tsquery('neutrino|(dark & matter)') query WHERE query @@ textsearch ORDER BY rank DESC LIMIT 10; これを除く、このクエリのすべてを理解できます。FROM apod, ...。 これは,どういう意味ですか?私は参加するのに慣れていますが、複数ではありませんFROM、コンマで区切られたステートメント。 私は、ネットを検索しました。それを見て考えた後、クエリと呼ばれる変数を宣言しているので、複数回使用できるように思えます。しかし、これが本当なら、それは何と関係がありFROMますか?
12 postgresql  join 


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