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

psqlで、一部のコマンドが効果を持たないのはなぜですか?

    ステートメントはセミコロンで終わります。

    psqlで 、セミコロンなしでEnterキーを押すと、ステートメントが次の行に続き、書き込んだ内容が実行されるのではなくクエリバッファーに追加されます。プロンプトがdbname=>から変わることに気付くでしょう。 dbname->へ 継続ラインにいることを示します。

    regress=> DROP TABLE sometable
    regress-> \r
    Query buffer reset (cleared).
    regress=> DROP TABLE sometable;
    ERROR:  table "sometable" does not exist
    regress=> 
    

    セミコロンなしでEnterキーを押すと、プロンプトがregress-#に変わることに注意してください。 何のアクションも取られません。テーブルsometableはありません 、したがって、ステートメントが実行された場合、エラーが報告されます。

    次に、\rの使用法をご覧ください 次の行に?これにより、クエリバッファがクリアされます。プロンプトがregress=#に戻ることに注意してください バッファリングされた部分的なステートメントがなくなったため、バッファがクリアされたとき。

    これは、ステートメントを行間で分割する方法を示しています。

    regress=> DROP TABLE
    regress-> sometable
    regress-> ;
    ERROR:  table "sometable" does not exist
    

    紛らわしいのは、psql \dのようなバックスラッシュコマンド 改行で終了し、セミコロンで終了しないため、 Enterキーを押したときに実行します。これは、ステートメントの作成中に(たとえば)テーブル定義を表示する場合に便利ですが、初心者にとっては少し混乱します。

    その他の質問について:

    1. psqlに「画面のクリア」コマンドがある場合 Windowsの場合、まだ見つけていません。 Linuxでは、他のreadlineを使用するプログラムと同じようにcontrol-Lを使用します。 Windowsの場合\! cls 動作します。

    2. PostgreSQLのDDLはトランザクションです。 BEGINできます トランザクション、いくつかのDDLの発行、およびCOMMIT それを有効にするためのトランザクション。明示的なトランザクションでDDLを実行しない場合は、すぐに有効になります。



    1. Dockerで実行されているPostgreSQLデータベースに対して実行されたParallelGoテスト

    2. postgresqlがJSONをJSONBに移行する

    3. SQLiteクエリ結果からINSERTステートメントを生成する

    4. MySQLで週ごとにグループ化する方法は?