psqlには、色々な機能があるので、使い方をまとめてみました。
psqlの説明
psqlはPostgreSQLに付属する対話型インターフェースです。対話的にコマンドを入力し、SQL文やメタコマンドを実行します。メタコマンドを使用することで、OSコマンドを実行することも可能です。また、ファイルから入力を読み込むこともできます。スクリプトの記述を簡便化したり、様々なタスクを自動化することが可能です。データベースのスーパーユーザ・一般ユーザともに、psqlを使用してデータベースに接続することができます。接続先ホストは、IPアドレスやホスト名で指定することができます。
psqlコマンドの使い方
psqlコマンドの書式
psql [接続オプション] [オプション] [データベース名[ユーザ名]]
主な接続オプション
稼働中のPostgreSQLサーバに接続する際のオプションです。オプションの設定がない場合は、環境変数が使用されますが、環境変数の設定がない場合は、デフォルトの設定になります。
接続オプション | 説明 | 環境変数 | デフォルト |
---|---|---|---|
-U ユーザ名 | 接続時のデータベースユーザ名を指定します。 | PGUSER | OSユーザ名 |
-h ホスト名またはIPアドレス | 接続先のホスト名またはIPアドレスを指定します。 | PGHOST | UNIXドメインによる接続 |
-d データベース名 | 接続先のデータベース名を指定します。 | PGDATABASE | データベースユーザ名 |
-p ポート名 | 接続先のポート番号を指定します。デフォルトは5432です。 | PGPORT | 5432 |
下のように、psqlコマンドに現れる最初のオプションのないパラメータはデータベース名とみなされます。
psql -U exam data1
ユーザ名exam、データベース名data1を指定して接続します。
主なオプション
オプション | 説明 |
---|---|
-l --list |
全てのデータベースのリストを表示し、終了する |
-c コマンド --command=コマンド |
指定したコマンドを実行結果を示した後、終了する 本オプションは、複数回、指定することが可能 |
-f ファイル名 --file=ファイル名 |
指定したファイルをソースとして読み込み、実行結果を示した後、終了する |
-s --sigle-step | 各コマンドを実行するかキャンセルするのかを確認する。(シングルステップモード) |
-1 --single-tranzaction | 複数のコマンドを1つのトランザクションで実行する |
-o ファイル名 --output=ファイル名 |
実行結果を指定したファイルに出力する |
指定したファイルの読み込みでは、シェルの入力リダイレクション(<)を使用して「< ファイル名」と記載することもできます。
指定したファイルの出力では、シェルの出力リダイレクション(>)を使用して、「> ファイル名」と記載することも出来ます。
主な出力形式オプション
オプション | 説明 |
---|---|
-A --no-align |
位置揃えなしの出力モードに切り替えます |
-F separator --field-separator=separator |
separatorを位置揃えを行わない出力におけるフィールド区切り文字として使用します。 |
--csv | CSV (Comma-Separated Values)形式で出力 |
-H --html |
HTML形式で出力 |
help オプションで 使い方を表示
$ psql --help
psql is the PostgreSQL interactive terminal.
Usage:
psql [OPTION]... [DBNAME [USERNAME]]
General options:
-c, --command=COMMAND run only single command (SQL or internal) and exit
-d, --dbname=DBNAME database name to connect to (default: "postgres")
-f, --file=FILENAME execute commands from file, then exit
-l, --list list available databases, then exit
-v, --set=, --variable=NAME=VALUE
set psql variable NAME to VALUE
(e.g., -v ON_ERROR_STOP=1)
-V, --version output version information, then exit
-X, --no-psqlrc do not read startup file (~/.psqlrc)
-1 ("one"), --single-transaction
execute as a single transaction (if non-interactive)
-?, --help[=options] show this help, then exit
--help=commands list backslash commands, then exit
--help=variables list special variables, then exit
Input and output options:
-a, --echo-all echo all input from script
-b, --echo-errors echo failed commands
-e, --echo-queries echo commands sent to server
-E, --echo-hidden display queries that internal commands generate
-L, --log-file=FILENAME send session log to file
-n, --no-readline disable enhanced command line editing (readline)
-o, --output=FILENAME send query results to file (or |pipe)
-q, --quiet run quietly (no messages, only query output)
-s, --single-step single-step mode (confirm each query)
-S, --single-line single-line mode (end of line terminates SQL command)
Output format options:
-A, --no-align unaligned table output mode
--csv CSV (Comma-Separated Values) table output mode
-F, --field-separator=STRING
field separator for unaligned output (default: "|")
-H, --html HTML table output mode
-P, --pset=VAR[=ARG] set printing option VAR to ARG (see \pset command)
-R, --record-separator=STRING
record separator for unaligned output (default: newline)
-t, --tuples-only print rows only
-T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)
-x, --expanded turn on expanded table output
-z, --field-separator-zero
set field separator for unaligned output to zero byte
-0, --record-separator-zero
set record separator for unaligned output to zero byte
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "/var/run/postgresql")
-p, --port=PORT database server port (default: "5432")
-U, --username=USERNAME database user name (default: "postgres")
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
For more information, type "\?" (for internal commands) or "\help" (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
非対話型の使い方
実施例1 全てのデータベースのリストを表示する
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
ossdb | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
ossdb2 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
実施例2 実施例1を -c オプションで実施
$ psql -c '\l'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
ossdb | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
ossdb2 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
実施例3 ossdbに接続して、コマンド '\d customer' を実施て、customerテーブルの定義を表示する
$ psql -c '\d customer' ossdb
Table "public.customer"
Column | Type | Collation | Nullable | Default
---------------+---------+-----------+----------+---------
customer_id | integer | | |
customer_name | text | | |
Indexes:
"customer_idx1" btree (md5(customer_name))
実施例4 ossdbに接続して、SQL文を実施
$ psql ossdb -c 'select * from customer'
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
実施例5 SQL文(-c オプション)を複数回指定して、出力結果を表示
$ psql ossdb -c 'select * from customer' -c 'select * from orders'
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
order_id | order_date | customer_id | prod_id | qty
----------+----------------------------+-------------+---------+-----
1 | 2024-03-24 22:15:13.579674 | 1 | 1 | 10
2 | 2024-03-24 22:15:13.582427 | 2 | 2 | 5
3 | 2024-03-24 22:15:13.583794 | 3 | 3 | 8
4 | 2024-03-24 22:15:13.5851 | 2 | 1 | 3
5 | 2024-03-24 22:15:13.586369 | 3 | 2 | 4
(5 rows)
実施例6 SQL文を実施し、その結果をCSV形式で出力
$ psql ossdb -c 'select * from customer' --csv
customer_id,customer_name
2, 鈴木物産
3, 高橋商店
1, 佐藤商事
2, 鈴木物産
3, 高橋商店
実施例6 SQL文を実施し、その結果を位置揃えなしでの出力
$ psql ossdb -c 'select * from customer' -A
customer_id|customer_name
2| 鈴木物産
3| 高橋商店
1| 佐藤商事
2| 鈴木物産
3| 高橋商店
(5 rows)
実施例7 SQL文を実施し、その結果を位置揃えなしで、セパレータを , で出力
$ psql ossdb -c 'select * from customer' -A -F ,
customer_id,customer_name
2, 鈴木物産
3, 高橋商店
1, 佐藤商事
2, 鈴木物産
3, 高橋商店
(5 rows)
実施例8 ファイルを指定して、SQL文を実施
$ psql ossdb -f SelectCustomer.txt
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
実施例9 ファイルを指定して、SQL文を実施
$ psql ossdb -f SelectTables.txt
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
order_id | order_date | customer_id | prod_id | qty
----------+----------------------------+-------------+---------+-----
1 | 2024-03-24 22:15:13.579674 | 1 | 1 | 10
2 | 2024-03-24 22:15:13.582427 | 2 | 2 | 5
3 | 2024-03-24 22:15:13.583794 | 3 | 3 | 8
4 | 2024-03-24 22:15:13.5851 | 2 | 1 | 3
5 | 2024-03-24 22:15:13.586369 | 3 | 2 | 4
(5 rows)
実施例11 リダイレクトでファイルを指定して、SQLを実施
$ psql ossdb < SelectCustomer.txt
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
実施例12 ファイルを指定して、SQL文を実施、結果をファイルに出力
$ psql ossdb -f SelectCustomer.txt -o SelectCustomerResult.txt
$ cat SelectCustomerResult.txt
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
対話型の使い方
対話型でpsql コマンドを使用し、正常に接続されると、"postgres=#”のように”データベース名=#”が表示されます。
下は、データベース ossdbに接続した実施例です
$ psql ossdb
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
ossdb=#
psqlを終了する場合は、\q と入力して終了します。
ossdb=# \q
$
sql文を入力して、実施すると、その結果が画面に表示されます。
ossdb=# select * from customer;
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
主なメタコマンド
内容 | メタコマンド |
---|---|
メタコマンドのヘルプを表示 | \? |
指定したメタコマンドのヘルプを表示 | \? メタコマンド |
データベース一覧の表示 | \l |
カレントデータベースの変更 | \c データベース名 |
テーブル一覧の表示 | \d または \dt |
テーブル一覧の表示(アクセス権つき) | \z または \dp |
テーブル定義を表示 | \d テーブル名 |
ロール一覧の表示 | \du |
ユーザー定義関数・プロシージャ一覧の表示 | \df |
ユーザ定義関数・プロシージャの詳細の表示 | \df+ 関数名・プロシージャ名 |
ファイルを指定して、SQL文を実施 | \i ファイルパス名 |
テーブル内容のエクスポート、インポート | \copy |
直前のコマンドの定期実行 | \watch 実行間隔 |
すべての表示オプションの現在の状態の表示 | \pset |
指定した表示オプションを表示 | \pset 表示オプション |
指定した表示オプションの変更 | \pset 表示オプション 値 |
問い合わせ実行時間の表示・非表示 | \timing |
メタコマンドのヘルプを表示 \?
色んなメタコマンドがあり、表示内容が多いです。
General
\copyright show PostgreSQL usage and distribution terms
\crosstabview [COLUMNS] execute query and display results in crosstab
\errverbose show most recent error message at maximum verbosity
\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);
\g with no arguments is equivalent to a semicolon
\gdesc describe result of query, without executing it
\gexec execute query, then execute each value in its result
\gset [PREFIX] execute query and store results in psql variables
\gx [(OPTIONS)] [FILE] as \g, but forces expanded output mode
\q quit psql
\watch [SEC] execute query every SEC seconds
Help
\? [commands] show help on backslash commands
\? options show help on psql command-line options
\? variables show help on special variables
\h [NAME] help on syntax of SQL commands, * for all commands
Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\ev [VIEWNAME [LINE]] edit view definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\s [FILE] display history or save it to file
\w FILE write query buffer to file
Input/Output
\copy ... perform SQL COPY with data stream to the client host
\echo [-n] [STRING] write string to standard output (-n for no newline)
\i FILE execute commands from file
\ir FILE as \i, but relative to location of current script
\o [FILE] send all query results to file or |pipe
\qecho [-n] [STRING] write string to \o output stream (-n for no newline)
\warn [-n] [STRING] write string to standard error (-n for no newline)
Conditional
\if EXPR begin conditional block
\elif EXPR alternative within current conditional block
\else final alternative within current conditional block
\endif end conditional block
Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\dA[+] [PATTERN] list access methods
\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes
\dAf[+] [AMPTRN [TYPEPTRN]] list operator families
\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families
\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families
\db[+] [PATTERN] list tablespaces
\dc[S+] [PATTERN] list conversions
\dC[+] [PATTERN] list casts
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
\dD[S+] [PATTERN] list domains
\ddp [PATTERN] list default privileges
\dE[S+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\det[+] [PATTERN] list foreign tables
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]
list [only agg/normal/procedure/trigger/window] functions
\dF[+] [PATTERN] list text search configurations
\dFd[+] [PATTERN] list text search dictionaries
\dFp[+] [PATTERN] list text search parsers
\dFt[+] [PATTERN] list text search templates
\dg[S+] [PATTERN] list roles
\di[S+] [PATTERN] list indexes
\dl list large objects, same as \lo_list
\dL[S+] [PATTERN] list procedural languages
\dm[S+] [PATTERN] list materialized views
\dn[S+] [PATTERN] list schemas
\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]
list operators
\dO[S+] [PATTERN] list collations
\dp [PATTERN] list table, view, and sequence access privileges
\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]
\drds [ROLEPTRN [DBPTRN]] list per-database role settings
\dRp[+] [PATTERN] list replication publications
\dRs[+] [PATTERN] list replication subscriptions
\ds[S+] [PATTERN] list sequences
\dt[S+] [PATTERN] list tables
\dT[S+] [PATTERN] list data types
\du[S+] [PATTERN] list roles
\dv[S+] [PATTERN] list views
\dx[+] [PATTERN] list extensions
\dX [PATTERN] list extended statistics
\dy[+] [PATTERN] list event triggers
\l[+] [PATTERN] list databases
\sf[+] FUNCNAME show a function's definition
\sv[+] VIEWNAME show a view's definition
\z [PATTERN] same as \dp
Formatting
\a toggle between unaligned and aligned output mode
\C [STRING] set table title, or unset if none
\f [STRING] show or set field separator for unaligned query output
\H toggle HTML output mode (currently off)
\pset [NAME [VALUE]] set table output option
(border|columns|csv_fieldsep|expanded|fieldsep|
fieldsep_zero|footer|format|linestyle|null|
numericlocale|pager|pager_min_lines|recordsep|
recordsep_zero|tableattr|title|tuples_only|
unicode_border_linestyle|unicode_column_linestyle|
unicode_header_linestyle)
\t [on|off] show only rows (currently off)
\T [STRING] set HTML <table> tag attributes, or unset if none
\x [on|off|auto] toggle expanded output (currently off)
Connection
\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}
connect to new database (currently "postgres")
\conninfo display information about current connection
\encoding [ENCODING] show or set client encoding
\password [USERNAME] securely change the password for a user
Operating System
\cd [DIR] change the current working directory
\setenv NAME [VALUE] set or unset environment variable
\timing [on|off] toggle timing of commands (currently off)
\! [COMMAND] execute command in shell or start interactive shell
Variables
\prompt [TEXT] NAME prompt user to set internal variable
\set [NAME [VALUE]] set internal variable, or list all if no parameters
\unset NAME unset (delete) internal variable
Large Objects
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID large object operations
データベース一覧の表示 \l
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
ossdb | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
カレントデータベースの変更 \c
カレントデータベースを変更するときは、\c メタコマンドを使用します。
$ psql
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \c ossdb
You are now connected to database "ossdb" as user "postgres".
ossdb=#
テールブルの一覧を表示する \d, \dt
\d, \dt メタコマンドは、カレントデータベースのテーブルの一覧を表示します。
メタコマンド \d の実施例
ossdb=# \d
List of relations
Schema | Name | Type | Owner
--------+--------------+-------+----------
public | char_test | table | postgres
public | customer | table | postgres
public | date_sample | table | postgres
public | date_test | table | postgres
public | numeric_test | table | postgres
public | orders | table | postgres
public | prod | table | postgres
public | varchar_test | table | postgres
public | zip | table | postgres
(9 rows)
メタコマンド \dt の実施例
ossdb-# \dt
List of relations
Schema | Name | Type | Owner
--------+--------------+-------+----------
public | char_test | table | postgres
public | customer | table | postgres
public | date_sample | table | postgres
public | date_test | table | postgres
public | numeric_test | table | postgres
public | orders | table | postgres
public | prod | table | postgres
public | varchar_test | table | postgres
public | zip | table | postgres
(9 rows)
テーブル一覧の表示(アクセス権つき) \z, \dp
\z コマンドの実施例
ossdb-# \z
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+--------------+-------+-------------------+-------------------+----------
public | char_test | table | | |
public | customer | table | | |
public | date_sample | table | | |
public | date_test | table | | |
public | numeric_test | table | | |
public | orders | table | | |
public | prod | table | | |
public | varchar_test | table | | |
public | zip | table | | |
(9 rows)
\dp コマンドの実施例
ossdb=# \dp
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+--------------+-------+-------------------+-------------------+----------
public | char_test | table | | |
public | customer | table | | |
public | date_sample | table | | |
public | date_test | table | | |
public | numeric_test | table | | |
public | orders | table | | |
public | prod | table | | |
public | varchar_test | table | | |
public | zip | table | | |
(9 rows)
ロール(ユーザー)の一覧を表示する \du
ossdb-# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
user001 | | {}
user002 | | {}
user003 | | {}
user004 | | {}
user005 | | {}
user006 | | {}
user007 | | {}
user008 | Cannot login | {}
user009 | | {}
user010 | Create DB | {}
user011 | | {}
ユーザー定義関数、ユーザー定義プロジージャの一覧を表示する \df
\df コマンドで作成した関数、プロシージャの一覧を表示させることが出来ます
\df コマンドの実施例
testdb=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+--------------+------------------+---------------------+------
public | delete_prod | | | proc
public | echosql | text | name text | func
public | helloworld | text | | func
public | prod_name | text | | func
public | testdataprod | void | | func
(5 rows)
指定した関数、プロシージャのソースコードを含む詳細を表示 \df+ 関数名またはプロシージャ名
testdb-# \df+ echosql
List of functions
Schema | Name | Result data type | Argument data types | Type | Volatility | Parallel | Owner | Security | Access privileges | Language | Source code | Description
--------+---------+------------------+---------------------+------+------------+----------+----------+----------+-------------------+----------+--------------------------+-------------
public | echosql | text | name text | func | volatile | unsafe | postgres | invoker | | sql | +|
| | | | | | | | | | | SELECT name AS result;+|
| | | | | | | | | | | |
(1 row)
ファイルを指定して、SQL文を実施 \i
\i メタコマンドは、指定したファイルに記載されているSQL文を実施します。
$ cat /var/tmp/SelectCustomer.txt
select * from customer;
$ psql ossdb
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
ossdb=# \i /var/tmp/SelectCustomer.txt
customer_id | customer_name
-------------+---------------
2 | 鈴木物産
3 | 高橋商店
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(5 rows)
テーブル内容を出力 \copy
\copy メタコマンドは、指定したテーブルの内容を指定したファイルに出力します。
ossdb=# \copy customer to /var/tmp/customer.txt
COPY 5
ossdb=# \q
$ cat /var/tmp/customer.txt
2 鈴木物産
3 高橋商店
1 佐藤商事
2 鈴木物産
3 高橋商店
デリミッターを指定して、CSV形式で出力します。
# \copy customer to '/var/tmp/customer.csv' delimiter ','
COPY SQL文でテーブル内容を出力
\copy メタコマンドは、SQL文でも実行することが出来ます。
指定したテーブル内容をCSV形式でファイルに出力する場合、以下のように実施します。
COPY table_name TO 'filename' WITH DELIMITER AS ','
COPY table_name TO 'filename' DELIMITER AS ','
COPY table_name TO 'filename' DELIMITER ','
COPY table_name TO 'filename' CSV
COPY table_name TO 'filename' WITH CSV
COPY文の対象はテーブルのため、ビューを出力することが出来きませんが、以下のようにすると、ビューでも出力することが出来ます。
COPY (select * from view_name) TO 'filename'
CSVファイルのデータをテーブルにインポートする \copy
CSV形式のデータを指定したテーブルにインポートします
# \copy <Table name> from <File name/pass> with csv
実施例
$ cat /var/tmp/customer.csv
1,佐藤商事
2,鈴木物産
3,高橋商店
postgres@taka-X202E:~$ psql testdb
psql (14.12 (Ubuntu 14.12-0ubuntu0.22.04.1))
Type "help" for help.
testdb=# \copy customer from /var/tmp/customer.csv with csv
COPY 3
testdb=# select * from customer;
customer_id | customer_name
-------------+---------------
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(3 rows)
COPY SQL文でCSVファイルをインポートする
指定したテーブル内容をCSV形式でファイルに出力する場合、以下のように実施します。
COPY table_name FROM 'filename' WITH DELIMITER AS ','
COPY table_name FROM 'filename' DELIMITER AS ','
COPY table_name FROM 'filename' DELIMITER ','
COPY table_name FROM 'filename' CSV
COPY table_name FROM 'filename' WITH CSV
実施例
testdb=# \copy customer from /var/tmp/customer.csv csv
COPY 3
testdb=# select * from customer;
customer_id | customer_name
-------------+---------------
1 | 佐藤商事
2 | 鈴木物産
3 | 高橋商店
(3 rows)
直前のコマンドを繰り返し実行する \watch
直前に実施したコマンドを指定した間隔(秒)で繰り返し実行します
# \watch <実施間隔>
3秒間隔でコマンドを実施
testdb=# insert into customer values (1, '佐藤商事');
INSERT 0 1
testdb=# \watch 3
2024年07月15日 15時52分09秒 (every 3s)
INSERT 0 1
2024年07月15日 15時52分12秒 (every 3s)
INSERT 0 1
2024年07月15日 15時52分15秒 (every 3s)
INSERT 0 1
2024年07月15日 15時52分18秒 (every 3s)
INSERT 0 1
2024年07月15日 15時52分21秒 (every 3s)
INSERT 0 1
\q2024年07月15日 15時52分24秒 (every 3s)
INSERT 0 1
^C
testdb=# select * from customer;
customer_id | customer_name
-------------+---------------
1 | 佐藤商事
1 | 佐藤商事
1 | 佐藤商事
1 | 佐藤商事
1 | 佐藤商事
1 | 佐藤商事
1 | 佐藤商事
(7 rows)
すべての表示オプションの現在の状態の表示 \pset
# \pset
実施例
testdb=# \pset
border 1
columns 0
csv_fieldsep ','
expanded off
fieldsep '|'
fieldsep_zero off
footer on
format aligned
linestyle ascii
null ''
numericlocale off
pager 1
pager_min_lines 0
recordsep '\n'
recordsep_zero off
tableattr
title
tuples_only off
unicode_border_linestyle single
unicode_column_linestyle single
unicode_header_linestyle single
xheader_width full
指定した表示オプションを表示 \pset 表示オプション
# \pset 表示オプション
実施例
testdb=# \pset null
Null display is "".
指定した表示オプションを変更 \pset 表示オプション 設定値
# \pset 表示オプション 設定値
実施例
testdb=# select echo_pltcl(null);
echo_pltcl
------------
(1 row)
testdb=# testdb=# \pset null '(null)'
Null display is "(null)".
testdb=# select echo_pltcl(null);
echo_pltcl
------------
(null)
(1 row)
問い合わせ実行時間の表示・非表示 \timing
サブコマンドを実施する前に、実行時間が表示されていない場合は、本サブコマンドを実行すると、実行したSQL文の実行時間を表示されるようになります。
実行したSQL文の実行時間を表示されている状況で本サブコマンドを実行すると、実行時間が表示されなくなります。
# \timing
実施例
testdb4=# \timing
Timing is on.
testdb4=# select * from orders;
order_id | order_date | customer_id | prod_id | qty
----------+----------------------------+-------------+---------+-----
1 | 2024-11-04 11:47:19.691619 | 1 | 1 | 10
2 | 2024-11-04 11:47:20.696869 | 2 | 2 | 5
3 | 2024-11-04 11:47:21.698209 | 3 | 3 | 8
4 | 2024-11-04 11:47:22.699217 | 2 | 1 | 3
5 | 2024-11-04 11:47:23.700495 | 3 | 2 | 4
(5 rows)
Time: 2.043 ms