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

PostgreSQLデータベースの操作方法

    目次

    データベースの一覧表示
    データベースのダンプ
    すべてのデータベースのダンプ
    許可のダンプ
    データベースの削除または削除
    データベースの削除Grant
    データベースを復元する
    Grantを復元する

    PostgreSQLはMySQLまたはMariaDBの優れた代替データベースエンジンですが、これらのデータベースの管理は、特にコマンドラインまたはPHPMyAdminからMySQLを使用することに慣れているシステム管理者にとっては大きく異なります。多くのCMSとアプリケーションは、そのままでPostgreSQLデータベースと対話する方法をすでに知っていますが、MySQLと同様に、それらのデータベースを維持するためにあなたに依存しています。

    この記事では、「root」ユーザーとしてサーバーにSSHで接続され、「postgres」ユーザーとして接続する必要があるデフォルト構成でPostgreSQLサーバーをインストールしていることを前提としています。したがって、ほとんどのコマンドは-Upostgresオプションも使用します。これらのコマンドは、ほとんどの最新バージョンでCentOSとUbuntuの間でほぼ同じですが、主にCentOS7VPSサーバーとPostgreSQL9.2を実行しているUbuntu16.04サーバーでテストされました。

    データベースと助成金の作成はかなり複雑ですが、cPanel、Plesk、またはPostgreSQL統合をサポートする別のコントロールパネルを使用する場合、これを設定するのは簡単です。コマンドラインからこれらのデータベースと付与を作成することは、この特定の記事の範囲外であるため、データベースがすでに実行され、使用されていることも前提としています。

    PostgreSQLのデータベースの一覧表示

    作業するデータベースの正確な名前を知るだけでなく、適切なサーバーで作業していることを再確認するのに役立ちます。まず、マシン上のPostgreSQLデータベースを一覧表示します。
    psql -l -U postgres

    このコマンドの出力は、データベース名、所有者、およびアクセス権の表です。今後のコマンドでデータベース名を説明するときに、最初の列のデータを使用します。この記事では、「 database_name」というデータベースを使用します 」。

    データベース名のみが必要で、他の情報が必要ない場合は、データベース名に対して正確なクエリを実行することで、余分な情報を取り除くことができます。
    psql -U postgres -tA -c 'select datname from pg_database;'

    このコマンドは、コマンドを実行します( -c で記述) フラグ)データ名を選択する pg_databaseの列 グローバルテーブル。 -t フラグはタプル(結果行)のみをリストし、ヘッダーや結果カウント、 -Aなどの余分な記述子を非表示にします フラグは配置を削除し、名前の前後に文字がない状態で1行に1つのデータベースを印刷します。このコマンドの出力は、データベースダンプのループを作成する場合に特に役立ちます。

    データベースをダンプする

    dumpコマンドは、すべてのテーブル、スキーマ、およびデータを含むデータベースの完全なコピーを取得し、それを単一の圧縮ファイルに保存します。
    pg_dump -c -Fc -U postgres database_name > database_name.psql

    このコマンドにはいくつかの重要なフラグがあります。 -c 、または –クリーン pg_dumpに通知します DROPステートメントを出力に追加するには、 -Fc 、または –format =custom pg_restoreで使用する出力を圧縮して整理します 後で。カスタム形式は柔軟性が最も高く、バックアップも1つのファイルに保存できるという利点があります。

    すべてのデータベースをダンプする

    上記のコマンドを複数回実行して、各データベースを独自のファイルに取り込む方が優れている可能性があります。 2番目のリストコマンドを参照して、いくつかの不要なデータベースをgrepして、個々のダンプを作成します。
    for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
    echo $db
    pg_dump -c -Fc -U postgres $db > $db.psql
    done

    このforループは、デフォルトのテンプレートとpostgresデータベースを除くすべてのデータベースのリストを pg_dumpに渡します。 .psqlを作成するコマンド 現在のディレクトリ内の各ファイルのファイル。

    注:すべてのデータベースを1つのファイルにダンプすることもできますが、データセットが大きいと、扱いにくくなり、復元が困難になる可能性があります。したがって、この方法はそれほど複雑ではなく、状況によっては機能する可能性がありますが、お勧めしません。

    pg_dumpall --clean -U postgres > pg.all.psql

    助成金のダンプ

    助成金はPostgreSQLスキーマに保存されます。 pg_dumpコマンドを使用して、スキーマをダンプし、システムで使用可能なすべての許可を取得できます。
    pg_dumpall -U postgres -s > pg.schema.psql

    これにより、付与だけでなく、データベースとテーブルの作成ステートメント、所有権と役割のメンバーシップ、ACL割り当てなど、サーバーの残りのスキーマもダンプされます。基本的に、データを除くすべてがダンプされます。

    ユーザー(ロール)と付与のみが必要な場合は、次のコマンドを使用してそれらを収集できます。
    pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql

    これは完全なスキーマダンプを活用しますが、ユーザーと付与をアセンブルするためにロール作成ステートメントと付与/取り消しステートメントのみを使用します。

    データベースの削除または削除

    データベースを破壊するための構文は非常に簡単です。このコマンドを入力するときは、確認を求められないので注意してください。
    psql -U postgres -c ‘drop database database_name’

    データベースが存在する場合、それはもう存在しません。この同じタスクのコマンドラインラッパーもあります:
    dropdb -U postgres database_name

    助成金を削除する

    助成金は、ユーザーを取り消すことでユーザーから削除されます。最初に特定のユーザーに何が付与されているかを知ることが重要なので、スキーマをダンプしてユーザーに関連する行を見つけて検索しましょう。
    pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user

    私の場合、次のような付与があります。
    GRANT ALL ON DATABASE database_name TO database_user;

    これに対抗するために、同じ記述子を取り消します。
    psql -U postgres -c ‘revoke all on database database_name from database_user;’

    注:わずかな変更に注意してください。GRANTはREVOKEに変更され、TOはFROMに変更されています。このコマンドは一重引用符で囲まれ、PostgreSQLでコマンドを実行するために-cフラグを付けてpsqlに渡されます。
    これにより、元のGRANTステートメントがスキーマ内のREVOKEに置き換えられます。このセクションの最初のコマンドを再度実行すると、渡した行のみが表示されます。
    REVOKE ALL ON DATABASE database_name FROM database_user;

    データベースを復元する

    この記事で使用されているpg_dumpメソッドを使用してダンプされたデータベースの場合、次のコマンドを使用してデータベース全体を復元できます。
    pg_restore -U postgres -c -C -O -d database_name database_name.psql>

    ここで必要なフラグはさらにたくさんあります。 -c または–クリーン 、以前と同様に、ファイルからPostgreSQLに書き込む前にデータベースオブジェクトを削除します。ダンプコマンドに使用されなかった場合に備えて、これを追加します。 -C 、または –作成 、データベースが存在しない場合は、復元中にデータベースdatabase_nameを作成します。データベースがすでに存在する場合は、 -c フラグは-Cの前にそれを破壊します それを再現します。次に、 -Oがあります 、または –所有者なし 、データベースから所有者を削除します。これにより、任意のソースからのバックアップを、復元を行うユーザーの所有者(この場合はpostgres)に変更できます。 -d database_name 復元先のデータベースの名前を記述します。これは、必要に応じて、バックアップの作成元の名前とは異なる名前にすることができます。最後の引数は、バックアップファイルの名前 database_name.psql です。 。

    助成金を元に戻す

    すべての付与はpg.grants.psqlファイルに保存されているため、復元する必要があるユーザーのみを選択する必要があります。この例では、database_userを復元します。
    grep database_user pg.grants.psql | psql -U postgres

    pg.grants.psqlファイルには役割と権限があるため、このコマンドは元の権限とパスワードでユーザーを再作成し、必要なデータベースとスキーマへのアクセスを許可します。


    1. MariaDBで月末を取得する方法

    2. PostgreSQLでデータエントリが自動的に削除されるまでの有効期限を設定する方法はありますか?

    3. OracleのOVER句

    4. OracleDataReader.Readメソッドのタイムアウト