sql >> データベース >  >> RDS >> PostgreSQL

ドライラン/サンドボックスSQLコマンドはできますか?

    Postgresでは、トランザクションで多くのことができます ロールバック 最後に:

    BEGIN;
    
    UPDATE foo ...:
    INSERT bar ...;
    SELECT baz FROM ...;
    CREATE TABLE abc...;   -- even works for DDL statements
    DROP   TABLE def...;
    ALTER  TABLE ghi ...:
    
    ROLLBACK;   -- !
    

    マニュアルの詳細: BEGIN ROLLBACK

    ただし、ロールバックできないものもあることに注意してください。たとえば、シーケンスはロールバックしません。または、dblink などの特別なコマンド 呼び出します。

    また、一部のコマンドは、他のコマンドとのトランザクションでは実行できません。 CREATE DATABASEのように またはVACUUM

    また、デッドロックなど、同時ロードによる副作用が発生する可能性があります。しかし、ありそうもない。 トランザクション分離レベル を設定できます 副作用を除外するための要件に応じて(パフォーマンスにいくらかのコストがかかります)。

    私は賢明なデータではこれを行いません。偶然に犯すリスクは大きすぎます。また、ユーザーに任意のコードを実行させることは、ほとんど封じ込められないリスクです。ただし、トレーニング環境の場合は、それで十分です。

    テンプレートデータベースでバックアップします 。何か問題が発生した場合、それが基本的な状態を復元するための最速の方法です。例(最後の章を参照):
    Postgresデータベース内のすべてのテーブルを切り捨てる

    これは、ブルートフォース代替としても使用できます。 :各研修生に手付かずの新しいデータベースを提供します。



    1. Oracle(11.2.0.1):UPDATEステートメントによって現在更新されている行を識別する方法

    2. 悪名高いjava.sql.SQLException:適切なドライバーが見つかりません

    3. すべてのリモート接続を許可する、MySQL

    4. PDOプリペアドステートメントのキャッシュ