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

PL / pgSQLは、PostgreSQLデータベースシステムのデフォルトの手続き型言語です。PL / pgSQLに関する質問は、おそらく「PostgreSQL」にもタグ付けする必要があります。

2
インデックスが存在しない場合は作成します
インデックスが存在しない場合にインデックスを追加できる機能に取り組んでいます。比較するインデックスのリストを取得できないという問題に直面しています。何かご意見は? これは、次のコードで解決される列作成の問題と同様の問題です:https : //stackoverflow.com/a/12603892/368511

4
機能性能
ストアドプロシージャのパフォーマンス(以前の記事)と使いやすさが疑わしいMySQLのバックグラウンドから来て、私はPostgreSQLを会社の新製品として評価しています。 私がやりたいことの1つは、アプリケーションロジックの一部をストアドプロシージャに移動することです。そのため、ここでは、特にパフォーマンスの落とし穴に関して、PostgreSQL(9.0)で関数を使用する際のDOおよびDO N'T(ベストプラクティス)を求めています。

3
PostgreSQLにUPSERTを実装する慣用的な方法
UPSERTPostgreSQLのさまざまな実装について読んだことがありますが、これらのソリューションはすべて比較的古く、または比較的エキゾチックです(たとえば、書き込み可能なCTEを使用)。 そして、これらのソリューションが推奨されているため古くなっているのか、それとも(ほとんどすべてがそうである)実稼働での使用に適さない単なるおもちゃの例であるのかをすぐに調べるのは、psqlの専門家ではありません。 PostgreSQLでUPSERTを実装する最もスレッドセーフな方法は何ですか?

5
(ファイル)データをPostgreSQL bytea列に挿入する方法は?
この質問はbytea v。oid v。blob v。大きなオブジェクトなどに関するものではありません。 主キーintegerフィールドとフィールドを含むテーブルがありbyteaます。byteaフィールドにデータを入力したいのですが。これはおそらく、いずれかのPL/言語で行うことができPL/Python、将来的にはこれを行うことを検討するかもしれません。 私はまだテストと実験を行っているので、「標準」のSQLステートメントを使用して(サーバー上の)ファイルからデータを挿入するだけです。サーバーに対する書き込み権限を持つ管理者のみが、希望する方法でデータを挿入できることを認識しています。ユーザーはbytea現在データを挿入しないので、この段階では心配していません。さまざまなStackExchangeサイト、PostgreSQLアーカイブ、およびインターネットを一般的に検索しましたが、答えが見つかりませんでした。 編集: 2008年からのこの議論は、私がやりたいことは不可能であることを意味します。byteaフィールドはどのように使用されますか? 編集: 2005年のこの類似の質問は未回答のままです。 解決済み: Webサイトのここで提供される詳細はpsycopg、Pythonで作成したソリューションの基礎を提供しました。byteaを使用して、バイナリデータを列に挿入することもできますPL/Python。「純粋な」SQLを使用してこれが可能かどうかはわかりません。

6
「ストアドプロシージャ」と「ストアドファンクション」の違いは何ですか?
したがって、この質問からのコメントは、PostgreSQLの「Stored Procedrues」と「Stored Funtions」にわずかな違いがあると述べています。 コメントはウィキペディアの記事にリンクしていますが、これの一部は当てはまらないようです(たとえば、SELECT声明で使用できるなど)。 構文自体は少し混乱しているようです。 CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN [...] END; $emp_stamp$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); を作成しますが、FUNCTIONとして参照しPROCEDUREます。 では、これら2つの違いは何ですか?



1
postgresテーブルの各レコードに対してトリガーを実行する良い方法はありますか?
いくつかのテーブルのデザインを制御できないシステムがあり(Slony-Iを介して複製されます)、「シャドウテーブル」と呼ばれる一連のシステムがあり、複製されたテーブルから情報を抽出します。 、必要な処理済みフォームに保存し、無視したいレコードを削除します。 現在、新しいレプリカを設定した後、更新を実行し、値をそれ自体に設定して(たとえば、UPDATE tablename SET field=field)トリガーを強制的に実行しますが、一部のテーブルは数百万のレコードであり、成長し、30分かかることがあります。(そして、真空もあります)。 それをトリガーするより良い方法、または渡された入力またはNEW呼び出しコンテキストに依存する入力で機能するような関数を書く方法はありますか?1つが更新され、もう1つが更新されないことを何度も見てきたため、2つの異なる機能を保持することに消極的です。


2
plpgsqlで記述された関数呼び出しのPostgresクエリプラン
使用するとき、それは可能ですpgadminかplsql内部で実行されるSQL文のクエリプランのホールドを取得するために、U SER D efined F慰め(UDF)を使用しますEXPLAIN。それでは、UDFの特定の呼び出しに対するクエリプランを取得するにはどうすればよいですか?F()pgadminでUDFが抽象化されて単一の操作になっています。 ドキュメントを見てきましたが、何も見つかりませんでした。 現在、ステートメントを引き出して手動で実行しています。しかし、これは大規模なクエリに対しては削減されません。 たとえば、以下のUDFを検討してください。このUDFは、クエリ文字列を出力できますが、ローカルに作成された一時テーブルがあり、貼り付けて実行すると存在しないため、コピーと貼り付けでは機能しません。 CREATE OR REPLACE FUNCTION get_paginated_search_results( forum_id_ INTEGER, query_ CHARACTER VARYING, from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, in_categories_ INTEGER[] DEFAULT '{}') RETURNS SETOF post_result_entry AS $$ DECLARE join_string CHARACTER VARYING := ' '; from_where_date CHARACTER …

1
EXPLAIN ANALYZEはplpgsql関数内のクエリの詳細を表示しません
PostgreSQL 9.3でPL / pgSQL関数を使用し、いくつかの複雑なクエリを内部で使用しています。 create function f1() returns integer as $$ declare event tablename%ROWTYPE; .... .... begin FOR event IN SELECT * FROM tablename WHERE condition LOOP EXECUTE 'SELECT f2(event.columnname)' INTO dummy_return; END LOOP; ... INSERT INTO ... FROM a LEFT JOIN b ... LEFT JOIN c WHERE ... UPDATE …

2
トリガー:削除された行をアーカイブテーブルに移動する
restrictionsPostgreSQLデータベースで呼び出される小さな(〜10行)テーブルがあり、値が毎日削除および挿入されます。 restrictions_deletedから削除されるすべての行がrestrictions自動的に保存されるというテーブルが必要です。以来、restrictionsシリアルIDを有し、全く重複が存在しないであろう。 PostgreSQLでこのようなトリガーを作成するにはどうすればよいですか?

1
関数パラメーターとUSING句を使用したJOINの結果との名前の競合
現在のPostgres 9.4でのこのセットアップを考えると(この関連する質問から): CREATE TABLE foo (ts, foo) AS VALUES (1, 'A') -- int, text , (7, 'B'); CREATE TABLE bar (ts, bar) AS VALUES (3, 'C') , (5, 'D') , (9, 'E'); 前の質問からのSQL Fiddleもあります。 私が書いたSELECTとをFULL JOIN参照し、質問の目的を達成するために。簡略化: SELECT ts, f.foo, b.bar FROM foo f FULL JOIN bar b USING (ts); 仕様に従って、列をアドレス指定する正しい方法tsは、テーブル修飾なしです。入力値(f.tsまたはb.ts)のいずれかをNULLにすることができます。このUSING句は、奇妙なケースを少し作成します。実際には入力に存在しない「入力」列を導入します。これまでのところとてもエレガント。 …

2
PL / pgSQLでクエリが結果を返さないかどうかを確認する簡単な方法はありますか?
私は現在PL / pgSQLを少し実験していますが、次のようなもっとエレガントな方法があるかどうか知りたいです: select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1; EXCEPTION WHEN NO_DATA_FOUND THEN select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1; EXCEPTION …

1
コンテキストで例外を生成する
PostgreSQLが例外をスローすると、次のような行「CONTEXT」があります。 ERROR: INSERT has more target COLUMNS than expressions LINE 3: ... ^ QUERY: INSERT INTO ... CONTEXT: PL/pgSQL FUNCTION "XXXXX" line 4 at SQL statement しかし、例外をスローすると、この行はありません。追加する方法が見つかりませんでした。 RAISE EXCEPTION 'blablabla' USING HINT = 'blablablabla'; この行を例外に追加することはできますか?

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