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

Postgresがlastval()を正しく返さない

    ここでの短いバージョンは、修飾されていないlastvalを使用するものです。 悪い考えです。トリガーやルールなどが問題を引き起こす可能性があります。

    lastvalは避けてください 全体的に。使用:

    BEGIN;
    
    INSERT INTO "users" ("email", "first_name", "last_name", "password", "objectstate_id", "activate_rid") 
    VALUES ('[email protected]', 'Xpress', 'Care', 'f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02', 4, 'EMQHTMMvViAB5BdYj0E6') 
    RETURNING id;
    

    ここで、id 生成されたキー列の名前である必要があります。

    このアプローチは、複数値の挿入とINSERT INTO ... SELECT ...を処理します。 正しく、トリガーがシーケンスに触れる問題は発生しません。

    関数呼び出しベースのアプローチを使用する必要がある場合は、少なくともcurrval('tablename_id_seq')を使用してください。 (適切なシーケンス名を渡す)lastvalの代わりに 。




    1. MySQL日時のデフォルト時刻と間隔

    2. PgBouncer1.6の新機能

    3. mysqlでmatchagainを使用する方法

    4. MySQL#1093-FROM句で更新するターゲットテーブル「giveaways」を指定できません