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

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

1
nullable列をテーブルに追加すると10分以上かかる
テーブルに新しい列を追加するのに問題があります。 数回実行しようとしましたが、10分以上実行した後、ロック時間のためクエリをキャンセルすることにしました。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用な情報: PostgreSQLバージョン:9.1 行数:〜250K 列の数:38 null許容列の数:32 制約の数:5(1 PK、3 FK、1 UNIQUE) インデックスの数:1 OSタイプ:Debian Squeeze 64 (HeapTupleHeaderを介して)PostgreSQLがnull許容列を管理する方法に関する興味深い情報を見つけました。 私の最初の推測は、このテーブルには既に8ビットの32個のnull許容列があるためMAXALIGN、HeapTupleHeaderは4バイトの長さです(検証されていません。その方法がわかりません)。 したがって、新しいnull可能列を追加するには、新しい8ビットを追加するために、すべての行でHeapTupleHeaderを更新する必要があり、MAXALIGNパフォーマンスの問題を引き起こす可能性があります。 そこで、null許容列の数を31に減らすために、null許容列の1つ(実際には実際にはnull許容ではありません)を変更して、私の推測が正しいかどうかを確認しようとしました。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 残念ながら、この変更には5分以上の非常に長い時間がかかるため、中止しました。 このパフォーマンスコストが発生する原因は何か考えていますか?

2
別のテーブルのデータで列を更新する
複雑な問題に取り組んでいますが、この問題を簡単に説明します。 2つのテーブルがあります A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] そして、私は3番目を更新したいです: C [ID, column1, column2,column3] このクエリを使用して別の3番目のテーブルを更新しています。 UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; 私は得ました: UPDATE 0 このクエリを実行すると: …

2
LIMIT付きの遅いORDER BY
私はこのクエリを持っています: SELECT * FROM location WHERE to_tsvector('simple',unaccent2("city")) @@ to_tsquery('simple',unaccent2('wroclaw')) order by displaycount 私はそれに満足しています: "Sort (cost=3842.56..3847.12 rows=1826 width=123) (actual time=1.915..2.084 rows=1307 loops=1)" " Sort Key: displaycount" " Sort Method: quicksort Memory: 206kB" " -> Bitmap Heap Scan on location (cost=34.40..3743.64 rows=1826 width=123) (actual time=0.788..1.208 rows=1307 loops=1)" " Recheck Cond: (to_tsvector('simple'::regconfig, unaccent2((city)::text)) …

2
Postgresqlのメモリ使用量を表示する
UbuntuサーバーでPostgresqlを実行しており、そのメモリ使用量を監視できる必要があります。現在、1分間のcronジョブでスクリプトを実行しています。このスクリプトは、さまざまな統計を監視/記録し、Postgresqlの現在のメモリ使用量も監視/記録する必要があります。Postgresqlが共有メモリを有効に利用しているため、 'top'などのプログラムによって指定された値が正確ではないという事実を除いて、私は周りを検索しましたが、あまり見つけることができませんでした。 どのようにしたらPostgresqlの合計メモリ使用量をいつでも監視できますか?このデータは、後で分析用のグラフを作成するために使用されます。

4
外部キー制約を含む列を既存のテーブルに追加する方法は?
次の表があります。 CREATE TABLE users (id int PRIMARY KEY); -- already exists with data CREATE TABLE message (); messagesテーブルをどのように変更しますか? という新しい列senderが追加されます テーブルをsender参照する外部キーはどこusersですか これはうまくいきませんでした # ALTER TABLE message ADD FOREIGN KEY (sender) REFERENCES users; ERROR: column "sender" referenced in foreign key constraint does not exist このステートメントは列も作成しませんか?

1
CTEがインラインサブクエリよりもはるかに悪いのはなぜですか
クエリプランナーがpostgresqlでどのように機能するかをよりよく理解しようとしています。 私はこのクエリを持っています: select id from users where id <> 2 and gender = (select gender from users where id = 2) order by latest_location::geometry <-> (select latest_location from users where id = 2) ASC limit 50 私のデータベースでは10ms未満で実行され、usersテーブルには約500kのエントリがあります。 次に、副選択の重複を避けるために、次のようにクエリをCTEとして書き直すことができると考えました。 with me as ( select * from users where id = 2 …

2
PostgreSQL:不変、揮発性、安定
IMMUTABLE関数、VOLATILE関数、STABLE関数の定義の本当の意味は不明です。 私はドキュメント、特にそれぞれの定義を読みました。 IMMUTABLEは、関数がデータベースを変更できないことを示し 、同じ引数値が指定された場合は常に同じ結果を返します。つまり、データベースの検索や、引数リストに直接存在しない情報の使用は行いません。このオプションを指定すると、引数がすべて定数の関数の呼び出しはすべて、関数の値ですぐに置き換えることができます。 STABLEは、関数がデータベースを変更できず、単一のテーブルスキャン内で同じ引数値に対して常に同じ結果を返すが、その結果はSQLステートメント間で変わる可能性があることを示します。これは、データベースルックアップ、パラメーター変数(現在のタイムゾーンなど)などに依存する結果を持つ関数の適切な選択です(現在のコマンドによって変更された行をクエリするAFTERトリガーには不適切です)。 current_timestamp関数ファミリーは、トランザクション内で値が変化しないため、安定と見なされます。 VOLATILEは、関数の値が単一のテーブルスキャン内でも変更される可能性があるため、最適化を実行できないことを示します。この意味で揮発性であるデータベース関数は比較的少数です。いくつかの例は、random()、currval()、timeofday()です。ただし、副作用がある関数は、その結果がかなり予測可能であっても、呼び出しが最適化されないように、揮発性に分類する必要があることに注意してください。例はsetval()です。 私の混乱は不変の条件と機能が安定したとしていますALWAYSまたは一貫して同じ引数与えられた同じ結果を返します。 IMMUTABLE定義は、関数がデータベース検索を行わないか、引数リストに直接存在しない情報を使用しないことを示しています。つまり、私にとっては、そのような関数はクライアントから提供されたデータを操作するために使用され、SELECTステートメントを含むべきではないということです... STABLEの場合、定義は同じですが、常に同じ結果を返す必要があると述べています。つまり、私にとっては、関数が同じ引数で呼び出されるたびに、同じ結果を返す必要があります(まったく同じ行、毎回)。 したがって、私にとって...つまり、更新可能な1つまたは複数のテーブルに対してSELECTを実行する関数は、揮発性でなければならないということです。 しかし、再び...それは私には正しく聞こえません。 これを私のユースケースに戻すと、常に追加されているテーブルで複数のJOINを使用してSELECTステートメントを実行する関数を書いているので、同じ引数を使用しても、関数呼び出しは呼び出されるたびに異なる結果を返すことが期待されます。 それで、それは私の機能が揮発性であるべきであることを意味しますか?ドキュメントは、この意味で揮発性であるデータベース関数が比較的少ないことを示していますが? ありがとうございました!

1
postgres-ロールなしのpg_dumpおよびpg_restore
受信データベースで適切な役割を持たずにダンプを復元しようとしています。 ここだけでなくここでも述べた--no-ownerように、オプションとして、pg_dumpまたはpg_restoreその両方が必要です。 次のコマンドラインを使用してダンプを作成しました "C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar 復元線は以下の通り "C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar" ご覧のとおり、どちらにも--no-ownerオプションがありますが、最終的には以下のエラーが発生します 私をひどくバグにするのは以下のログです pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») : pg_restore: [programme d'archivage (db)] Erreur …

2
列フィールドのいずれかがnullであるテーブル行から削除する
どの列がnullであるかを明示的に指定せずに、列フィールドのいずれかがnullであるテーブルから行を削除する方法はありますか? 私はpostgreSQLを使用しています。 これが私の関係スキーマです: Column | Type | Modifiers --------------+---------+---------------------------------------------------------------------- id | integer | not null default nextval('aurostat.visitor_center_id_seq'::regclass) date | date | persons | integer | two_wheelers | integer | cars | integer | vans | integer | buses | integer | autos | integer | ありがとう
11 postgresql 


1
PL / Pythonが信頼できないのはなぜですか?
ドキュメントによると: PL / Pythonは「信頼されていない」言語としてのみ利用可能です。つまり、ユーザーが実行できることを制限する方法が提供されていないため、plpythonuという名前が付けられます。セキュアな実行メカニズムがPythonで開発された場合、信頼できるバリアントplpythonが将来的に利用可能になる可能性があります。 Python用の安全な実行メカニズムを開発するのが難しいのに、Perlなどの他の言語用ではないのはなぜですか?

2
列の数値と整数-サイズとパフォーマンス
PostgreSQLテーブルを使用するアプリケーションがあります。テーブルは非常に大きく(数十億行)、整数の列があります。 integerは最大6桁、つまり0〜999,999で、負の数は使用できません。 に変えることを考えましたnumeric(6,0)。 これは良い考えでしょうか?うnumeric(6,0)少ないバイトを取りますか?パフォーマンスはどうですか(このテーブルは頻繁にクエリされます)?
11 postgresql 

2
テーブルから最後の行をフェッチする最も速い方法は何ですか?
次Pricesの列を持つPostgreSQLテーブルがあります。 price (10進数) product_id (整数) 列もcreated_atありupdated_atます。 価格は定期的に更新され、古い価格はテーブルに保持します。特定の製品について、表の最後の価格は現在の価格です。 特定の製品の最終価格を取得する最も効率的な方法は何ですか。 product_id最後のレコードのインデックスとクエリ 3番目の列active(ブール)を追加して最新の価格をマークし、複合インデックスを作成します(product_idおよびactive) または、他の何か?

3
セットからランダムな値を設定する
ランダムな値をデータベースに入れる必要がありますが、完全にランダム化されたテキスト(7hfg43d3など)にしたくありません。代わりに、自分で指定した値の1つをランダムに選択します。

1
PostgreSQL Windowsサービスのファイルへのロギング
次のコマンドを実行するための代替手段が必要です。 C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start。 このようにして、サーバーが起動し、にログインしC:\yyy\log\pgsql.logます。ただし、サーバーをサービスとして登録しようとすると、ログオプションが使用できず、サーバーはイベントビューアにログを記録します。pg_ctlのドキュメントから: pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t秒] [-s] [-oオプション] サーバーにファイルへのログインを強制するにはどうすればよいですか?注:ワンクリックインストーラーを使用したくありません。解凍したバイナリで作業したいだけです。

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