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

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

1
PostgreSQLのログアクティビティで特定のユーザーを除外することはできますか?
データベースでユーザーのアクティビティを監視する必要があります。で次のパラメータを設定しましたpostgresql.conf: log_min_duration_statement = 0 log_connections = on log_disconnections = on log_line_prefix = '%t %a %d %h %u |' ただし、ほとんどのログファイルは、postgresユーザーが実行したステートメントで満たされていることを理解しています。これは、メンテナンスタスク用に作成したスクリプトで使用されます。サイズが12 MBを超えるログファイル。 特定のユーザーのアクティビティをログから除外する方法はありますか?
10 postgresql  log 

1
データでマテリアライズドビューをバックアップおよび復元することは可能ですか?
マテリアライズドビューを計算するのが難しい場合がありますが、再計算ではなく、実際に保存されたデータを使用してバックアップおよび復元できるようにしたいと考えています。 PostgreSQL 9.4では可能ですか? (代わりの方法は、実際のテーブルを作成することですが、「更新」するのが困難です)

1
なぜ列型にNULLをキャストする必要があるのですか?
大量の更新を行うためのコードを生成し、次のようなSQLを生成するヘルパーがあります。 (アクティブフィールドとコアフィールドの両方がタイプですboolean) UPDATE fields as t set "active" = new_values."active","core" = new_values."core" FROM (values (true,NULL,3419), (false,NULL,3420) ) as new_values("active","core","id") WHERE new_values.id = t.id; しかしそれは失敗します: ERROR: column "core" is of type boolean but expression is of type text ::booleannullに追加することで機能させることができますが、奇妙に思えますが、なぜNULLは型と見なされますTEXTか? また、どの型にNULLをキャストするかを知るためにコードを再調整する必要があるため、キャストするのは少し難しいです(現在、列と値のリストは、JSONオブジェクトの単純な配列から自動生成されています)。 。 なぜこれが必要なのですか?NULLのタイプを知るために生成コードを必要としない、よりエレガントなソリューションがありますか? それが適切であれば、Node.JSでsequelizeを使用してこれを行いますが、Postgresコマンドラインクライアントでも同じ結果が得られます。
10 postgresql  null  cast 

1
PostgreSQL:SSL SYSCALLエラー:EOFが検出されました
最初に、このエラーに関連するいくつかの投稿を検索して見つけましたが、それらのほとんどはRAMの問題かSSLの問題のどちらかを指しているため、コマンドラインにsslmode = disabledを追加してSSLの可能性を克服しようとしました: psql -U waypoint -d waypoint -W -c "alter table telemetria_data.historico alter clase type smallint, alter valor type real[], alter power type smallint, alter voltaje type real;" -h localhost -v sslmode=disable しかし、同じメッセージが表示されました: SSL SYSCALL error: EOF detected connection to server was lost 考えられるメモリの問題について、トラブルシューティングの方法がわかりません。 データ構造はこの質問で説明されているものであり、継承されたすべてのテーブルに対して完全な変更テーブルを完成させるには、非常に長時間実行されるクエリになる可能性があります。 OS: Linux ip-10-1-0-9 3.16.0-4-amd64 …

5
自己結合の代替
私はここで質問をしました:https: //stackoverflow.com/questions/43807566/how-to-divide-two-values-from-the-same-column-but-at-different-rows 同じ列の異なる行にある同じテーブルの値の分割について。今、私はより多くの分子と分母(異なるuns)を持っているという問題を抱えています。self joinPostgresでこの問題を解決する良い方法はまだありますか、それともより良い解決策がありますか? 例: | postcode | value | uns | |----------|-------|-----| | AA | 40 | 53 | | BB | 20 | 53 | | AA | 10 | 54 | | AA | 20 | 55 | | AA | 10 | 56 | | AA …

2
複合外部キーに別の一意制約が必要なのはなぜですか?
以下は、レコードが同じテーブル内の親レコードを参照できる単純なテーブルです。 CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); 他のフィールド値(num)の1つが親レコードと子レコードの間で同一でなければならないという追加の要件により、複合外部キーでうまくいくと思いました。最後の行を FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) となったエラー:参照された表「foo」というのキーを与えられた一意の制約マッチングはありません。 この制約は簡単に追加できますが、参照される列(id)の1つが既に一意であることが保証されているのに、なぜ必要なのかわかりません。私の見たところ、新しい制約は冗長になります。

1
pgAdminはリモート操作で非常に遅い
私の開発サーバーにリモート接続しているローカルのpgAdminからこのクエリを実行します。 select * from users order by random() limit 1; それは17秒間ハングし、表示されます Total query runtime: 148 ms. 1 row retrieved. また、テーブルを右クリックしても、すべての操作でハングします。 その後、RDPを介して接続し、同じpgAdminバージョンで同じクエリを実行しますquery time: 32 ms。これにより、で結果がすぐに表示されます。 次に、ローカルのpgAdminからクエリを再度実行します。 Total query runtime: 337 ms. 1 row retrieved. サーバーに対して130ミリ秒のpingを実行しています。FTP経由でファイルをかなり高速にアップロードできるので、接続速度は十分すぎるはずです。 ローカルのpsqlで実行したときの同じクエリは、接続時間を含めて数秒で終了します。 ローカルのpgAdminでローカルのdbコピーを使用した同じクエリもすぐに終了します。 pgAdminのバージョンは1.20.0です。最新の1.22でも確認しました-まだ同じです。 pgAdminを高速化するにはどうすればよいですか? psqlは正常に動作することに注意してください。そこには同じ待ち時間がありません。 17秒間のクエリ実行のpgAdminログ: 2016-02-06 16:18:03 INFO : queueing : select * from users …

2
配列の効率的なマージ(重複の削除)
テーブルが2つleft2ありright2ます。両方のテーブルは大きくなります(1〜1000万行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); このタイプのクエリを実行します。 SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

2
psql:SELECT *…1つの列を除く
私は、psqlで1つを除くすべての列を選択する簡単な方法を検索します。 psql私は対話型のコマンドラインを意味します。 *引用符で囲まれた列名のリストに拡張できるツールがあれば幸いです。次に、カラムを取り外して手で取り外すことができます。 私の質問は、psqlのインタラクティブな使用法についてです。これは、SQL標準に不満があり、「select * -foo」のようなものを実行したいという人々の質問の複製ではありません。
10 postgresql  psql 

3
サブクエリを追加するとPostgreSQLクエリが非常に遅くなる
150万行のテーブルに対する比較的単純なクエリがあります。 SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 出力: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
postgresql pg_dumpがビューをテーブルとしてエクスポートするのはなぜですか?
私はPostgreSQL 9.3 pg_dumpツールを使用して、以下を使用してパブリックスキーマ定義のみを抽出しています。 pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql しかし、チェックするschema.sqlと、ビューの1つがCREATE TABLEステートメントではなくステートメントに表示されますCREATE VIEW。 しかし、私pg_dumpが特定のビューを使用している場合: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql 次にschema.sql、実際のビュー定義が含まれます。 それで、なぜこれが起こっているのですか?君たちありがとう!

1
インデックスを使用してpostgresでのソートを高速化する方法
私はpostgres 9.4を使用しています。 のmessagesスキーマは次のとおりです。メッセージはfeed_idに属し、posted_atを持っています。また、メッセージには親メッセージを含めることができます(返信の場合)。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

1
PostgreSQLでの読み取り専用の単一テーブルアクセスに対する最小限の権限
以下は、新しいユーザー(ログイン)を作成し、PostgreSQL上の指定された1つのテーブルに読み取り専用アクセスを許可するように機能するように見えるコマンドのリストです。 これらのコマンドは、ログイン時に十分な権限で実行されると想定します(つまりpostgres、デフォルトのインストールでのログイン)。 CREATE ROLE user_name NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity'; ここで、データベースのselectテーブルtab_abcに付与したいdb_xyzので、ここに移動します(データベースdb_xyzは、PgAdminなどで現在のデータベースとして選択されています)。 grant select on tab_abc to user_name; 問題は次のとおりです。これで十分ですか、それとも追加の助成金(データベースconnectなどusage)が必要ですか? これらのコマンドは機能するようですが、デフォルトのインストールにはデフォルトのセキュリティ設定があります。サーバー管理者がより強力なセキュリティを構成している場合、どのような追加の許可を追加する必要がありますか? 私が許可する必要がないと思われconnectたりusageしているという暗示を付与しながら、 - select?いつもそうですか?

1
Amazon RDS PostgreSQLで外部キーを一時的に無効にする方法は?
既存のテスト環境をAmazon RDS PostgreSQLに移行しています。テストフレームワークには、特定のテーブルのデータを以前の状態にリロードする機能があります。このため、外部キーを無効にし、既存のデータを削除し、保存状態をロードして、外部キーを再度有効にします。 現在、テストフレームワークはすべてのトリガーを無効にすることで外部キーを無効にします(もちろん、これにはスーパーユーザーが必要です)。 alter table tablename disable trigger all; RDSでは、これは失敗します。 エラー:拒否された権限:「RI_ConstraintTrigger_a_20164」はシステムトリガーです Amazon RDS PostgreSQLで外部キーを一時的に無効にするにはどうすればよいですか? 注:同様の質問がすでに尋ねられています(RDS上のPostgreSQL:FK制約を使用してデータを一括インポートする方法は?)

2
ロックを待機しているPostgreSQLのALTER TABLEクエリをキャンセルしても安全ですか?
ALTER TABLE数時間前にクエリを開始しましたpg_stat_activityが、ロックを待機していることが(を介して)最近認識されました。変更したいテーブルをロックしていて、それを手放さない他のクエリを発見しました。 このクエリは(列のデータ型を変更する)「単純な」クエリですが、大規模なテーブルで実行されています。 ロックを保持しているプロセスを強制終了するのではなく、を強制終了することにしましたALTER TABLE。 トランザクションでラップしませんでしたALTER TABLE。 私の理解する限り、クエリがロックを待機しているという事実は、常にロックを待機していて、何も変更していないことを意味します。 これは本当ですか?ALTER TABLEクエリを完全にキャンセルしても安全ですか?または、クエリがすでに何かを変更していて、それをキャンセルすると、データベースが何らかの中間状態になる可能性がありますか? PS:を使用してキャンセルする予定ですSELECT pg_cancel_backend(pid);。これが悪い考えであるなら、私に知らせてください。

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