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

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

2
TOASTテーブルの成長が制御不能-FULLVACは何もしません
最近、自動バキューム機能を利用して他の30個のPGSQLサーバーと連携するために、PostgreSQL 8.2.11サーバーを8.4にアップグレードしました。これは、ハードウェアを管理する別のITグループによって行われたため、他のアップグレードを選択する余地はほとんどありません(しばらくの間、9以上は表示されません)。サーバーは非常に閉じた環境(孤立したネットワーク、限られたroot権限)に存在し、RHEL5.5(i686)で実行されます。アップグレード後、データベースは常に1日あたり5〜6 GBに成長しています。通常、データベース全体では、約20GBです。現在、それは〜89GBです。同等のデータベースを実行し、実際にサードパーティのアプリケーションを介してレコードを相互に同期するサーバーがいくつかあります(1つは内部の仕組みにアクセスできません)。他のデータベースは、本来あるべきように〜20GBです。 次のSQLを実行すると、特定のテーブル、具体的にはそのTOASTテーブルに問題があることはかなり明白です。 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_relation_size(C.oid) DESC LIMIT 20; 生成されるもの: 関係| サイズ ------------------------------------ + --------- pg_toast.pg_toast_16874 | 89 GB 数00.warmstates | …

1
`pg_lsclusters`がPostgresクラスタをリストしないのはなぜですか?
apt-getPostgres 9.2.4 をインストールしました(PPAを使用)。 私が使用pg_dropcluster --stop 9.2 main私はちょうど取り付けられた別個のSSDボリューム(ラックスペースブロック・ストレージ・ボリューム)に新しいクラスタを作成する方法を意図するので、デフォルトデータベースクラスタを除去します。 SSDボリュームにデータが存在する新しいクラスターを作成して開始しました(psその新しいクラスターで実行されているすべての通常のPostgresプロセスが表示され、Postgresシェルを開いてSQLを実行できます(つまり、正常に実行されています)。実行pg_lsclustersすると、何も表示されません。 main私はそれを削除する前に、クラスタがうまく上場しました。新しいクラスターが実行されているのに、なぜ表示されないのですか?サーバーを再起動しました(念のため)。

1
LISTEN / NOTIFY特権
私はpostgresデータベースを1つ持ち、2人のユーザーがいます。アリスとボブ。 NOTIFY alice_channel 'sensitive data'ボブがLISTENチャネル名が「alice_channel」であると推測するだけでこっそりと侵入することなく、できるようにしたいと思います。 実際には、チャネル名を推測することは非常に困難ですが、これはせいぜいあいまいさによるセキュリティです。 データベースユーザーがLISTEN&を使用する(乱用する)のを防ぐ方法はないと私は信じていますNOTIFYか?つまり、付与または取り消すことができる関連する特権はないようです。 これは行き止まりですか?

1
PostgreSQLのカウンターの同時増分
アイテムのリストとその使用法で構成されるプロジェクトの統計表を維持する必要があります(ページビューをカウントするWebサイトのようなものを考えてください)。アイテムがインスタンス化されるたびに、特定のアイテムの使用量を増やす必要があります。 私の最初の実装は: statistics( id integer NOT NULL, name character varying(255) NOT NULL, usage integer NOT NULL DEFAULT 0, ); UPDATE statistics SET usage = usage + 1 WHERE name = '<name>'; 私の懸念は、パフォーマンスと並行性についてです。更新プロセスは数十(おそらく80〜120)デバイスによってインスタンス化され、1秒あたり数回発生する可能性があるため、私の質問は次のとおりです。 1)このメソッドは同時実行性を維持しますか?(つまり、複数のデバイスが「同時に」更新を要求した場合、すべての要求がカウントされますか?) 2)結果を達成するための最良の方法を提案できますか?更新の書き込みには負荷がかかると思いますが、読み取りの方がはるかに頻繁です。値を増やす特定の機能はありますか?私は「シーケンス」を見ていますが、それが正しい方法であるかどうかはわかりません... アドバイスをよろしくお願いします

2
PostgreSQLの結合テーブルで重複するレコードを削除するにはどうすればよいですか?
次のようなスキーマを持つテーブルがあります。 create_table "questions_tags", :id => false, :force => true do |t| t.integer "question_id" t.integer "tag_id" end add_index "questions_tags", ["question_id"], :name => "index_questions_tags_on_question_id" add_index "questions_tags", ["tag_id"], :name => "index_questions_tags_on_tag_id" 重複しているレコード、つまり同じレコードtag_idとquestion_id別のレコードの両方を削除します。 そのためにSQLはどのように見えますか?

2
postgresqlデータベースをサーバー間で移動する
自宅に数ギガバイトの(空間)データベースを作成しました。1台のコンピューターから私のコンピューターにそのままデータベース全体を移動したいと考えています。 何もファンシーではないので、仕事用のコンピューターに新しいpostgresql / postgis dbインスタンスを作成します。dbユーザーは、両方のコンピューターで同じ名前を持つ場合とそうでない場合があります。 出来ますか?何に注意すべきですか?どうすれば痛みをなくすことができますか? postgres v9.1.5とpostgis拡張を使用しています。Ubuntu12.04(カーネル3.2.0-31)

4
PostgreSQL 9の単一インスタンスのデータベースの最大数
マルチカスタマーアプリケーションの開発では、カスタマーごとに異なるデータベースを使用する予定です。しかし、1000以上の顧客(アプリケーション)になる可能性があります。 PostgreSQLは問題なく処理しますか? 誰かが似たようなことを試しましたか? 注:データベースごとに、それぞれ35個のテーブルがあり、平均として最大3000レコードです。

1
Postgresクライアントのコピー(\ copy)コマンドは一時テーブルにアクセスできませんか?
最終的にpsql -fを使用して実行するデータをエクスポートするためのSQLコマンドのリストを生成しています。クエリはすべて同じデータのサブセットを取得するので、資格を考慮に入れて、適格なユーザーIDのリストを一時テーブルにそのように配置すると思いました create temporary table tmp_export_users as (select id from users where ...) それから私のような\ copyコマンドでそれをもう一度参照してください \copy (select ... from table where user_id in (select id from tmp_export_users)) TO 'filename.csv' WITH CSV HEADER それらはすべて同じファイルにあり、1行に1つずつ実行します。-fコピーコマンドが一時テーブルを表示できないというエラーが表示されるので、クライアントのコピーコマンドが実際に同じpostgresを使用してはいけないと思いますpsqlとしてのセッション。 あれは正しいですか?その動作を変更する方法はありますか?

2
COMMITはPostgreSQL 9.5の匿名のplgpsql関数内で機能しますか?
匿名のplpgsqlコードブロック内のループを使用して、多数の大きなファイルをいくつかのテーブルにインポートしてパーティション分割します$do$。 $do$ BEGIN FOR yyyy in 2012..2016 THEN EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$; END LOOP; END; $do$ LANGUAGE plpgsql このプロセス全体には約15時間かかります。ある時点でインポートエラーが発生した場合、すべてのインポートがロールバックされないことを願っています。 IIRC COMMITは、関数全体が単一のトランザクションとして扱われるため、ストアド関数内では機能しません。 のドキュメントから$do$ コードブロックは、パラメーターのない関数の本体であるかのように扱われ、voidを返します。解析と実行は1回です。 これは、全体$do$が1つのトランザクションであるため、ブロック内のコミットが機能しないことを想定しています。私は正しいですか?

1
ハッシュ結合とハッシュセミ結合
PostgreSQL 9.2 私は違いを理解しようとしているHash Semi JoinだけにHash Join。 2つのクエリを次に示します。 私 EXPLAIN ANALYZE SELECT * FROM orders WHERE customerid IN (SELECT customerid FROM customers WHERE state='MD'); Hash Semi Join (cost=740.34..994.61 rows=249 width=30) (actual time=2.684..4.520 rows=120 loops=1) Hash Cond: (orders.customerid = customers.customerid) -> Seq Scan on orders (cost=0.00..220.00 rows=12000 width=30) (actual time=0.004..0.743 rows=12000 loops=1) …

1
アイドル接続が多すぎると、PostgreSQL 9.2のパフォーマンスに影響しますか?
データベースサーバーでのクエリの応答に時間がかかるようで、CPU使用率が高いと思います。を実行するとps aux、約250の「アイドル」接続が表示されます(多すぎると思われます)。私は完全な診断を始めていませんが、これが探し始めるのに良い場所かどうか知りたいと思っていました。 また、PgBouncerをトランザクションレベルのプールで使用しています。idleプールサイズを調整することで、接続数を簡単に減らすことができると思います。ただし、正当な理由がない限り、あまり多くの変更を開始したくありません。 idlePostgreSQL 9.2の多くの接続がパフォーマンスに影響を与える可能性はありますか? どうもありがとう!

2
Postgresはビューで選択されていない計算列の計算を実行しますか?
ビューからデータを選択することによるパフォーマンスへの影響を理解しようとしています。ビューの列の1つは、元のテーブルの他のデータの関数です。 計算は、計算された列が選択した列のリストにあるかどうかに関係なく実行されますか? テーブルがあり、ビューがそのように宣言されている場合 CREATE TABLE price_data ( ticker text, -- Ticker of the stock ddate date, -- Date for this price price float8, -- Closing price on this date factor float8 -- Factor to convert this price to USD ); CREATE VIEW prices AS SELECT ticker, ddate, price, factor, price …

1
単一のテーブルで複数の一意の制約を使用すると、設計が悪いと見なされますか?
私はPostgreSQLのINSERT INTO .. ON CONFLICT (..) DO UPDATE ..構文を見ていましたが、それを使用して複数の一意制約チェックを実行することはできません。つまり、複合一意インデックスを列名で参照するかON CONFLICT (Name, Symbol)(一意のインデックスがこれらの2つの列に対して定義されている場合)、または主キーを使用します。列に2つの個別の一意のインデックスを定義する場合、チェックできるのは1つだけです。 CREATE TABLE student (Id int primary key, Name varchar(50), Symbol varchar(50), CONSTRAINT col1_unique UNIQUE (Name), CONSTRAINT col2_unique UNIQUE (Symbol) ); INSERT INTO student (Id, Name, Symbol) VALUES (1, 'John', 'J'), (2, 'David', 'D'), (3, 'Will', 'W'); INSERT INTO …

2
ハッシュインデックスが等価検索でBtreeよりも速くならないのはなぜですか?
ハッシュインデックスをサポートするPostgresのすべてのバージョンについて、少なくともバージョン8.3までは、ハッシュインデックスがbtreeインデックスより「類似または遅い」または「良くない」という警告または注意があります。ドキュメントから: バージョン7.2: 注:ハッシュインデックスのユーティリティは限られているため、通常はハッシュインデックスよりもBツリーインデックスの方が適しています。=比較の場合でも、ハッシュインデックスが実際に Bツリーよりも速いという十分な証拠はありません。さらに、ハッシュインデックスにはより粗いロックが必要です。セクション9.7を参照してください。 バージョン7.3(および8.2まで): 注:テストの結果、PostgreSQLのハッシュインデックスはBツリーインデックスと同じかそれより遅いことがわかりました。また、ハッシュインデックスのインデックスサイズとビルド時間ははるかに悪いです。また、同時実行性が高いと、ハッシュインデックスのパフォーマンスが低下します。これらの理由により、ハッシュインデックスの使用はお勧めしません。 バージョン8.3: 注:テストは実行しないように、PostgreSQLのハッシュインデックスを示したは良い B-treeインデックスよりも、およびハッシュインデックスのインデックスサイズと構築時間ははるかに悪いです。さらに、ハッシュインデックス操作は現在WALログに記録されていないため、データベースクラッシュ後にハッシュインデックスをREINDEXで再構築する必要がある場合があります。これらの理由により、ハッシュインデックスの使用は現在推奨されていません。 このバージョン8.0のスレッドでは、ハッシュインデックスが実際にbtreeよりも高速であるケースを発見したことはなかったと主張しています。 バージョン9.2でさえ、このブログの投稿(2016年3月14日)によると、実際のインデックスを作成する以外のパフォーマンス向上はほとんどありませんでした: AndréBarbosaによるPostgresのハッシュインデックス。 私の質問は、それはどのようにして可能ですか? 定義により、ハッシュインデックスはO(1)操作であり、btreeはO(log n)操作です。ではO(1)、正しいブランチを見つけてから正しいレコードを見つけるよりも、ルックアップの速度が遅い(またはそれに似ている)のはどうしてでしょうか。 索引付け理論について、それを可能にすることは決してありません。


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