PostgreSQL では、ストアド プロシージャ (関数) によりデータベース操作に柔軟性が提供されます。さまざまな入力パラメーターを使用する場合、モード パラメーターを含む単一の関数を使用するか、異なる目的に別個の関数を使用するか、どちらが最適なアプローチであるか疑問に思うことがあります。効果的なデータベース管理には、オプションとその効率を理解することが重要です。
更新を制御するモード パラメーターを使用した関数を実装する次のコードを考えてみましょう。動作:
CREATE OR REPLACE FUNCTION update_site( mode integer, name character varying, city character varying, telephone integer, ) RETURNS integer AS $$ BEGIN IF mode = 0 THEN UPDATE "Sites" SET ("City","Telephone") = (city,telephone) WHERE "SiteName" = name; RETURN 1; ELSIF mode = 1 THEN UPDATE "Sites" SET "City" = city WHERE "SiteName" = name; RETURN 1; ELSIF mode = 2 THEN UPDATE "Sites" SET "Telephone" = telephone WHERE "SiteName" = name; RETURN 1; ELSE RAISE NOTICE 'Error on site update: %, %', SQLERRM, SQLSTATE; RETURN 0; END IF; END; $$ LANGUAGE plpgsql;
このオプションを使用すると、単一の関数内でさまざまな更新シナリオを処理できますが、関数の数が増えると複雑になり、エラーが発生しやすくなります。
代わりに、次のような特定の目的のために個別の関数を作成することもできます。
CREATE OR REPLACE FUNCTION update_site_name_city( name character varying, city character varying ) RETURNS integer AS $$ BEGIN UPDATE "Sites" SET "City" = city WHERE "SiteName" = name; RETURN 1; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION update_site_telephone( name character varying, telephone integer ) RETURNS integer AS $$ BEGIN UPDATE "Sites" SET "Telephone" = telephone WHERE "SiteName" = name; RETURN 1; END; $$ LANGUAGE plpgsql;
このアプローチでは、メンテナンスと読みやすさが簡素化されます。各機能は特定のタスク専用であるためです。ただし、より多くの関数が必要になるため、コードが複雑になる可能性があります。
両方のオプションの効率は、アプリケーションの特定の要件によって異なります。モードベースの関数は、モードの数が少ない単純な更新の場合は若干高速になる可能性があります。ただし、複雑な更新や多数のモードの場合は、個別の関数の方が効率的で拡張性が高い可能性があります。
単一モードベースの関数か個別の関数の選択は、次の点によって決まります。要素:
これらの要素を慎重に考慮して、お客様にとって最適なアプローチを決定してください。アプリケーション。
以上がPostgreSQL 更新の単一関数と個別関数: どちらがより効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。