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

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

1
PostgreSQL-数千の要素の配列での作業
列が整数配列として渡す値の大きなリストに含まれているかどうかに基づいて行を選択しようとしています。 これが私が現在使用しているクエリです: SELECT item_id, other_stuff, ... FROM ( SELECT -- Partitioned row number as we only want N rows per id ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY start_date) AS r, item_id, other_stuff, ... FROM mytable WHERE item_id = ANY ($1) -- Integer array AND end_date > $2 ORDER BY …

1
FROM句でSet Returning Function(SRF)の実行が遅くなるのはなぜですか?
これはデータベース内部の質問です。私はPostgreSQL 9.5を使用FROMしています。たとえば、これらのコマンドを実行するときのように、句の中でSet Returning Functions(SRF)(テーブル値関数(TVF)とも呼ばれます)の実行速度が低下するのはなぜですか。 CREATE TABLE foo AS SELECT * FROM generate_series(1,1e7); SELECT 10000000 Time: 5573.574 ms それはだ常に、より実質的に遅いです CREATE TABLE foo AS SELECT generate_series(1,1e7); SELECT 10000000 Time: 4622.567 ms ここで作成できる一般的なルールはありますか?たとえば、節の外で常に Set-Returning関数を実行する必要がありFROMますか?

1
PostgresでCASE式のインデックスを作成する方法
次のように、CASE式にインデックスを作成しようとしています CREATE TABLE test(i INT, j INT); CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j END); このエラーを取得する: ERROR: syntax error at or near "CASE" LINE 1: CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j ... ^ ********** Error ********** ERROR: syntax error at or near "CASE" …

1
SELECTリストのセットリターン関数(SRF)について
SELECTリストでSet Returning Function(SRF)を使用する場合とFROM句でSRFを使用する場合で、動作に違いがあるのはなぜですか? たとえば、2つの行を返す単純なSRFの場合: CREATE OR REPLACE FUNCTION gen_series(out integer, out int) RETURNS SETOF record AS $$ SELECT 1,1 UNION SELECT 2,2; $$ LANGUAGE SQL; SELECT gen_series(); それぞれがレコードを含む2つの単一列の行を返します。 => gen_series ------------ (1,1) (2,2) (2 rows) 一方SELECT * FROM gen_series();、レコードが展開された2つの行を返します。 => column1 | column2 ---------+--------- 1 | 1 2 | 2 …

1
PostgreSQL / PostGIS 9.6で複合インデックスが壊れました
PostgreSQL 9.2では、地理(postGIS)タイプと整数の両方を複合インデックスとして持つインデックスを問題なく作成できました。しかし、現在(9.6)はインデックスの作成に不満を示しており、それが提供するヒントを理解できません。 列とデータはすべて適切に作成されていますが、Postgresは作成インデックスについて不平を言っています。 ERROR: data type integer has no default operator class for access method "gist" HINT: You must specify an operator class for the index or define a default operator class for the data type. ********** Error********** ERROR: data type integer has no default operator class for access method …

1
PostgreSQL 8.3でのバックアップおよびPostgreSQL 9.4での復元後にデータベースサイズが縮小
私は、pg_dumpPostgreSQL 8.3サーバーでホストしているJIRAデータベースで実行しました。データベース後のサイズvacuum fullだった217132652(約207メガバイト)。 次に、次のコマンドを使用して、JIRAデータベースをPostgreSQL 9.4サーバーに復元しました。 $ psql -X -v ON_ERROR_STOP=1 -d jira2 -U jira -h localhost < jiradb2017_03_12.sql 私はを使用して以来、エラーが発生すると復元が終了すると思いON_ERROR_STOP=1ますが、SQLスクリプトは正常に終了しました(データの復元に関連しないいくつかの警告にもかかわらず)。 最終的に、サイズが158019348(約151 MB)のデータベースができました。 だから、ここの話は何ですか?データベースが正常に復元され、PostgreSQLがストレージ(バージョン8.3から9.4の間)を最適化し、スペースをより効率的に使用していると仮定できますか?

2
pg_trigger_depth()は、トリガーのカスケード(再帰)を防止するために使用するのは悪いですか?
pg_trigger_depth() = 0トリガーのカスケード(再帰)を防止するときに(デバッグ以外の目的で)使用するのが悪いのはなぜですか? 誰かがなぜそれが悪いのかを示すコードを提供できますか? 複数のトリガーが同じデータで同時に機能している場合、トリガーを使用して停止する条件pg_trigger_depth() = 0は、2番目に機能するトリガーを停止するためだと思います。 私はそれがこの(私の)質問に対する良い解決策になると思いましたが、そうでないと言われました: トリガー内に、更新または挿入がトリガーから来たかどうかを確認する方法はありますか? それは良い質問をするだろうと思った。 これはソリューションとしてここに提供されています: PostgreSQLの再帰トリガーを防止する Postgres 9.3ドキュメント: https://www.postgresql.org/docs/9.3/static/functions-info.html

1
JSONオブジェクトからのUNIQUE制約の作成
2つのフィールド(idとdata(json))しか持たないテーブルpeoplesの例をいくつか見てみましょう。 SELECT data FROM peoples ; {"name": "Adam","pos":"DBA","age":22 } {"name": "Alice","pos":"Security","age":33 } {"name": "Bob","pos":"Manager","age":42 } 一意である必要がある「pos」フィールドの制約を作成したい。JSON制約についてインターネットで検索しましたが、結果はありませんでした。 この問題をどのように処理できますか?

3
誰かが何百万もの更新を実行している奇妙な行動を説明できますか?
誰かがこの動作を私に説明できますか?OS Xでネイティブに実行されているPostgres 9.3で次のクエリを実行しました。インデックスサイズがテーブルサイズよりも大きくなる可能性がある動作をシミュレートしようとしましたが、さらに奇妙なものが見つかりました。 CREATE TABLE test(id int); CREATE INDEX test_idx ON test(id); CREATE FUNCTION test_index(batch_size integer, total_batches integer) RETURNS void AS $$ DECLARE current_id integer := 1; BEGIN FOR i IN 1..total_batches LOOP INSERT INTO test VALUES (current_id); FOR j IN 1..batch_size LOOP UPDATE test SET id = current_id + …

1
外部サーバーのアクセス許可が拒否されました
私は、外部テーブルを作成できるように制限された権限を持つユーザーを設定しようとしています。2つのデータベースがhr_dbありaccounting_dbます。のhr_userユーザーhr_dbとのaccounting_userユーザーを作成しましたaccounting_db。accounting_userユーザーにhr_db、usersテーブルなどの一部のテーブルに対する選択権限のみを付与したい。これを行うには、スーパーユーザーとしてhr_dbデータベースにアクセスして実行しました。 GRANT CONNECT ON DATABASE hr_db TO accounting_user; GRANT SELECT ON people TO accounting_user; 私はへの接続を設定hr_dbからaccounting_db外国データラッパを使用しました: CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', dbname 'hr_db', port '5432'); 次に、accounting_userユーザーのマッピングを追加しました。 CREATE USER MAPPING FOR accounting_user SERVER hr_db OPTIONS (user 'accounting_user', password 'secretpassword'); のパスワードaccounting_userは、コマンドラインからのログインに使用するものと同じです。これはうまくいきます: psql -U accounting_user -W hr_db [enter accounting_user …

4
同時グループ予約の戦略は?
座席予約データベースを検討してください。nシートのリストがあり、それぞれに属性がありますis_booked。0はそうでないことを意味し、1はそうであることを意味します。それ以上の数でオーバーブッキングがあります。 オーバーブッキングを許可せずに複数のトランザクション(各トランザクションが同時にyシートのグループを予約する)の戦略は何ですか? 私は単にすべての未予約の座席を選択し、ランダムに選択されたyのグループを選択し、それらすべてを予約し、その予約が正しいかどうかを確認します(別名is_bookedの数が1を超えていない場合、座席を予約した別のトランザクションとコミット)、次にコミットします。それ以外の場合は中止して、再試行してください。 これは、Postgresで分離レベルのRead Committedで実行されます。

7
デリミタに続くすべての後続部分文字列を生成するにはどうすればよいですか?
区切り文字の複数のインスタンスを含む可能性がある文字列が与えられた場合、その文字の後に始まるすべての部分文字列を生成したいと思います。 たとえば、次のような文字列'a.b.c.d.e'(または配列{a,b,c,d,e})を指定した場合、次のような配列を生成します。 {a.b.c.d.e, b.c.d.e, c.d.e, d.e, e} 意図された使用法は、別の列が書き込まれるときはいつでも、ドメイン名部分のクエリを容易にするための列を埋める(つまりq.x.t.com、クエリのすべてを見つけるt.com)ためのトリガーとしてです。 これを解決するには厄介な方法のように見えますが(そうなる可能性が非常に高いかもしれません)、このような関数を(Postgresの)SQLでどのように記述することができるか知りたいです。 これらはメールのドメイン名であるため、可能な最大要素数を特定することは困難ですが、大多数は<5です。

1
CLUSTERのパフォーマンスへの影響
Postgres 9.2データベースを最適化して、日付制限のあるクエリを高速化しようとしています。 私はtimestamp列を持っていますが、たいていはいつか尋ねているのでtimestamp、date解析するためのインデックスを作成しました: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 次に、パフォーマンスを向上させるために、CLUSTER foo上記のインデックスを使用してテーブルを作成します。 CLUSTER foo USING foo_my_timestamp_idx; SQL-CLUSTERのマニュアルによると、テーブル インデックス情報に基づいて物理的に並べ替えられます テーブルのPKを使用する他のクエリのパフォーマンスに影響があるかどうかを知ります(としましょうid_foo)。欠点はありますか?

1
「フォッカー」とは誰ですか。なぜ彼は私のスキーマを所有しているのですか?
Compose.ioにPostgres DBデプロイメントがあり、アプリに標準の「compose」dbを使用しています。新しいスキーマでDBを再作成できるように、現在のDBの内容を消去したいと思います。これを行う最善の方法は「ドロップスキーマパブリックカスケード」を使用することですが、自分のデータベースでこれを実行しようとすると、 ERROR: must be owner of schema public スキーマの所有者はadmin(作成するユーザーがpsqlアクセスを提供する)ではなく、という名前のユーザーであることがわかりますfocker。 compose=> \dn List of schemas Name | Owner --------+-------- public | focker (1 row) スキーマの所有者を変更しようとしましたが、上記と同じエラーで失敗しました。 なぜ私のデータベースはこのように設定されているのですか?管理ユーザーがデータベースを一掃できるように変更する方法はありますか?

2
パーティション化するかしないか?
SO、外部ブログ投稿、マニュアルに関するいくつかの質問をすでに読んだことがある SO:Pgのパーティションテーブルへの外部キー制約 dba.SE:PgのパーティションテーブルへのFKのさまざまな処理方法 マニュアル:継承 マニュアル:パーティショニング 手動:制約トリガー ブログ:継承によるPostgresモデリング それでも、自分のケースを考慮してパーティション分割を行うべきかどうか疑問に思っています。 ケース-簡略化 顧客データの保存。下記の表の名前はすべて、わかりやすくするために作成されています。 顧客によって識別可能で非物理的な存在であるオブジェクト、およびオンデマンドで顧客にオブジェクトを送り返す必要がある場合にオブジェクトが実際に格納される物理オブジェクト、または他の方法でオブジェクトを処理する。それらは多対多の関係でマッピングされます。objects_nonphysical、objects_physical、objects_mapping_table。 2番目の多対多の関係は、これらの非物理オブジェクトとそのメトリックの間です。いくつかのメトリックにバインドされているオブジェクトがあります。metrics、metrics_objects_nonphysical 非物理オブジェクトと物理オブジェクトの両方に、子と親の関係である階層テーブルがあります。objects_nonphysical_hierarchy、objects_physical_hierarchy 各顧客のニーズと要件に応じて、物理オブジェクトに関するデータを提供することも、ゼロから作成する必要がある場合もあります。基本的に、私がする必要があるのは: 高速のための社内体制の維持INSERTおよびSELECTマッピングが場所を取るために起こっているのはここであるため、ステートメントを。 外部顧客が非物理オブジェクトを表示および操作できるようにシステムを維持します -データの高速検索。ステートメントの効率に対する強いニーズSELECT -このデータは、多くの顧客がいつでも検索できるようになっています。 私の配慮 データにアクセスし、データを表示して操作する顧客がいる可能性がありますが、それは、データを取得したり、データを処理している請負業者である必要はありません。 これにより、システムにテーブルパーティション分割を導入し、どのパーティションデータが該当するか(請負業者のパーティション分割)を常に把握していることを考慮し、次に、顧客のパーティション分割が必要な外部顧客向けのメインテナンスシステムに進みました。(これは、自動化ツールと一連のルールを使用して顧客の方法でデータを書き換えるのを遅らせるため、顧客ごとにテーブルごとに1つのパーティションのみをスキャンします。 データ量 特に新しい顧客のオブジェクトとメトリックをインポートする場合、私のデータは常に増加します。システムに到着する新しいデータのペースは、長期的に見て現時点では予測できません。誰が次の顧客になるかがわからない場合、実際に測定する方法はありません。現在、2つの顧客があり、各テーブルのすべての顧客に対して100万行が多かれ少なかれあります。しかし、将来的には、新規顧客の数が1,000万人になると予測しています行程度になるています。 ご質問 これらの質問はすべて互いに関連しています。 ここでパーティショニングを本当に考慮すべきですか、それとも過剰ですか?私は常に正確に1つをスキャンしているので、それは役に立つと考えていますパーティションを。 パーティショニングがFK最適な方法である場合、自分のニーズを考慮して最も効果的に制約を適用するにはどうすればよいですか?私は行くべきconstraint triggersですか、それとも内部システムのアプリケーション層に保つべきですか、それとも他の方法でしょうか? パーティショニングがうまくいかない場合、何に飛び込むべきですか? 十分なデータが提供されていない場合は、下のコメントでお知らせください。

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