コンテンツへスキップ

ファイル

root@localhost myProject]# tree
.
|-- ansible.cfg
|-- group_vars
|   `-- db.yml
|-- hosts
|-- roles
|   |-- postgresql
|   |   |-- defaults
|   |   |   `-- main.yml
|   |   |-- handlers
|   |   |   `-- main.yml
|   |   |-- tasks
|   |   |   |-- configurations.yml
|   |   |   |-- createDbCluster.yml
|   |   |   |-- main.yml
|   |   |   |-- packages.yml
|   |   |   `-- services.yml
|   |   `-- templates
|   |       `-- postgresql.conf.j2
|   `-- test1
|       `-- tasks
|           |-- hashTest.yml
|           `-- main.yml
`-- site.yml

9 directories, 14 files

db.yml

[root@localhost myProject]# more group_vars/db.yml
---
postgresql_version: "12"

dbs:
  db1:
    dataDirectory: /var/lib/pgsql/data1
    port: 5432
  db2:
    dataDirectory: /var/lib/pgsql/data2
    port: 5433

task

[root@localhost myProject]# more roles/test1/tasks/main.yml
- name: "hash test"
  import_tasks: hashTest.yml
[root@localhost myProject]# more roles/test1/tasks/hashTest.yml
---
- name: "print dict"
  #debug:
  #  var: item
  file: path={{ item.value.dataDirectory }} state=directory owner=root group=root mode=0755
  with_dict: "{{ dbs }}"

実行結果

[root@localhost myProject]# ansible-playbook -i ./hosts site.yml
/usr/lib/python2.7/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.exceptions import InvalidSignature

PLAY [db] *********************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************
ok: [localhost]

TASK [test1 : print dict] *****************************************************************************************************************************************************
changed: [localhost] => (item={u'key': u'db1', u'value': {u'dataDirectory': u'/var/lib/pgsql/data1', u'port': 5432}})
changed: [localhost] => (item={u'key': u'db2', u'value': {u'dataDirectory': u'/var/lib/pgsql/data2', u'port': 5433}})

PLAY RECAP ********************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

【データベース】

■作成

■削除

【テーブル】
■テーブル作成

import sqlite3
con = sqlite3.connect("app.db")
c = con.cursor()
c.execute("create table genre(id integer primary key,name_full text, name_short text)")
con.commit()
con.close()

■テーブル一覧

import sqlite3
con = sqlite3.connect("app.db")
c = con.cursor()
c.execute("select * from sqlite_master where type='table'")
for x in c.fetchall():
    print(x)
con.close()

■テーブル削除

■テーブル名の変更

c.execute("alter table category rename to genre")

■カラム名一覧

 

よく使うコマンド

  • createdb:データベースを作成する
  • createuser:ユーザを作成する
  • dropdb:データベースを削除する
  • dropuser:ユーザを削除する
  • initdb:データベースクラスタを初期化する
  • pg_controldata <dataディレクトリ>:データベースクラスタの様々な情報を表示する
  • pg_ctl:postmasterを起動・停止する
  • pg_dump:一つのデータベースをバックアップする
  • pg_dumpall:全てのデータベースをバックアップする
  • pg_restore:pg_dumpでダンプしたデータを復元する
  • psql:対話的にSQLを実行する

psql -l:データベース一覧を表示する

  • vacuumdb:vacuumを実行する

ユーザーコマンド

  • ユーザ一覧

testdb=> select * from pg_user;

  • ユーザの追加

$ createuser --interactive testuser

全ての権限を持たないユーザーを作成する。

Shall the new role be a superuser? (y/n) n

Shall the new role be allowed to create databases? (y/n)n

Shall the new role be allowed to create more new roles?(y/n)n

  • ユーザの削除

testdb=> drop user testuser;

  • サンプルコード
# 作成途中

param(
    [parameter(mandatory=$false)][switch]$dbStart,
    [parameter(mandatory=$false)][switch]$dbStop,
    [parameter(mandatory=$false)][switch]$backupStart,
    [parameter(mandatory=$false)][switch]$backupStop,
    [parameter(mandatory=$false)][string]$recovery,
    [parameter(mandatory=$false)][switch]$archiveCleanup,
    [parameter(mandatory=$false)][int]$logCleanup = 30,
    [parameter(mandatory=$false)][switch]$dbStatus,
    [parameter(mandatory=$false)][string]$dbDir
)

. E:\my-document\Programing\powershell\logger.ps1
$log = New-object MyLogger

if($dbDir){
    $dirDbCluster = $dbDir
}

$log.debug("DB管理者:[$dbAdmin]")
$log.debug("DBユーザ:[$dbUser]")
$log.debug("DBクラスターディレクトリ:[$dirDbCluster]")

function isDbRunning([string]$dirDbCluster){
    pg_ctl status -D $dirDbCluster|out-null
    return $?
}

function isBackupRunning([string]$dirDbCluster){
    
}
function dbStartStop([string]$dbAdmin,$dirDbCluster,$dbInit) {
    $argument = ("-U", $dbAdmin, "-D", $dirDbCluster, $dbinit)
    Start-Process -FilePath pg_ctl.exe -ArgumentList $argument -WindowStyle Minimized
    if($?){
        $message = ("Success {0} database.[{1}]" -f $dbInit, $dirDbCluster)
        $log.info($message)
        $retVal = $returnSuccess
    } else {
        $log.error("Error {0} database.[{1}]" -f $dbInit, $dirDbCluster)
        $retVal = $returnErrorValue
    }
    return $retVal
}
function execSql([string]$dbAdmin,$sql){
    #psql -U $dbAdmin -c $sql | Out-Null
}

if($dbStatus){
    if(isDbRunning($dirDbCluster)){
        $log.debug("Database[$dirDbCluster] is running.")
    } else {
        $log.debug("Database[$dirDbCluster] is not running.")
    }
    exit $returnSuccessValue
} elseif($dbStart){
    if(isDbRunning($dirDbCluster)){
        $message = ("Database[{0}] already running" -f $dirDbCluster)
        $log.error($message)
        $retVal = $returnErrorValue      
    } else {
        $retVal = dbStartStop $dbAdmin $dirDbCluster "start"
    }
    exit $retVal
} elseif($dbStop){
    if(isDbRunning($dirDbCluster)){
        $retVal = dbStartStop $dbAdmin $dirDbCluster "stop"
    } else {
        $log.error("Database[$dirDbCluster] is not running.")
        $retVal = $returnErrorValue
    }
    exit $retVal
} elseif($backupStart){
    $sql = "SELECT pg_start_backup(now($dirDbCluster)::text)"
} elseif ($backupStop) {
    $sql = "SELECT pg_stop_backup(now($dirDbCluster)::text)"
} elseif ($recovery) {
    $log.debug("recovery mode")
    $sql = ""
} elseif ($archiveCleanup) {
    $log.debug("Cleanup Archive")
    $sql = ""
} else {
    write-host("usage:")
    exit $returnErrorValue
}