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

postgresqlのmysql_insert_id代替

    PostgreSQLの観点から、擬似コードで:

     * $insert_id = INSERT...RETURNING foo_id;-- only works for PostgreSQL >= 8.2. 
    
     * INSERT...; $insert_id = SELECT lastval(); -- works for PostgreSQL >= 8.1
    
     * $insert_id = SELECT nextval('foo_seq'); INSERT INTO table (foo...) values ($insert_id...) for older PostgreSQL (and newer PostgreSQL)
    

    pg_last_oid() OIDがある場合にのみ機能します。 PostgreSQL 8.1以降、OIDはデフォルトでオフになっています。

    したがって、使用しているPostgreSQLのバージョンに応じて、上記の方法のいずれかを選択する必要があります。もちろん、理想的には、上記を抽象化するデータベース抽象化ライブラリを使用します。それ以外の場合、低レベルのコードでは、次のようになります。

    方法1:INSERT ... RETURNING

    // yes, we're not using pg_insert()
    $result = pg_query($db, "INSERT INTO foo (bar) VALUES (123) RETURNING foo_id");
    $insert_row = pg_fetch_row($result);
    $insert_id = $insert_row[0];
    

    方法2:INSERT; lastval()

    $result = pg_execute($db, "INSERT INTO foo (bar) values (123);");
    $insert_query = pg_query("SELECT lastval();");
    $insert_row = pg_fetch_row($insert_query);
    $insert_id = $insert_row[0];
    

    メソッド3:nextval();挿入

    $insert_query = pg_query($db, "SELECT nextval('foo_seq');");
    $insert_row = pg_fetch_row($insert_query);
    $insert_id = $insert_row[0];
    $result = pg_execute($db, "INSERT INTO foo (foo_id, bar) VALUES ($insert_id, 123);");
    

    最も安全な賭けは3番目の方法ですが、扱いにくいです。最もクリーンなものが最初ですが、最近のPostgreSQLを実行する必要があります。ただし、ほとんどのdb抽象化ライブラリはまだ最初の方法を使用していません。



    1. データ型の選択はどの程度の影響を与える可能性がありますか?

    2. データベースパッチセットを取得する

    3. MySQL:データベースに対する**すべての**権限を付与します

    4. 完全なmysqlmysqldumpファイルから単一のテーブルを復元できますか?