### [Connecting to Postgresql in a docker container from outside](https://stackoverflow.com/questions/37694987/connecting-to-postgresql-in-a-docker-container-from-outside)
```
psql postgresql://postgres:1234@localhost:5432/postgres
```
```bash
# 連接到資料庫:使用以下指令連接到 PostgreSQL 資料庫
psql -U 用戶名 -d 資料庫名 -h 主機名 -p 連接埠
\l # 列出所有 PostgreSQL 中的資料庫
# 切換資料庫
\c 資料庫名
# 查看資料庫中的 Table
\d # 用於顯示當前資料庫中所有關聯對象(包括表格、視圖、索引、序列等)的命令
\dt # 僅顯示當前資料庫中的所有表格(關聯表)
\du # 列出 PostgreSQL 中的所有使用者
\d+ 顯示資料表的描述 (表結構)
```
### SQL
```sql
-- 取得最靠近現在時間的五筆資料
SELECT *
FROM your_table
ORDER BY ABS(EXTRACT(epoch FROM (your_timestamp_column - NOW())))
LIMIT 5;
-- 使用 EXTRACT(epoch FROM (your_timestamp_column - NOW())) 來計算每筆資料的時間差,以秒為單位。
-- LIMIT 5 限制結果只返回前五筆資料
```
### char(5) to varchar(5)
```sql
-- Step 1: 建立新的 varchar(5)欄位
ALTER TABLE order_list ADD COLUMN currency_new varchar(5);
-- Step 2: 複製數據至新欄位
UPDATE order_list SET currency_new = currency;
-- Step 3: 刪除原始欄位
ALTER TABLE order_list DROP COLUMN currency;
-- Step 4: 重新命名新欄位
ALTER TABLE order_list RENAME COLUMN currency_new TO currency;
```
### 使用者配置
```sql
-- 列出 PostgreSQL 中的所有使用者
SELECT usename FROM pg_user;
-- 執行以下命令來創建一個新的使用者
CREATE USER username WITH PASSWORD 'password';
-- 請將 `username` 更換為你想要的使用者名稱,將 `password` 更換為你想要設置的密碼。
-- 新增一個資料庫
CREATE DATABASE dbname;
-- 授予使用者適當的權限,例如讓使用者擁有對特定資料庫的訪問權限
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;
-- 請將 `database_name` 更換為你想要給予存取權限的資料庫名稱。
-- 完成後,可以使用以下命令檢查新建使用者是否成功添加
\du
-- 移除某個使用者對某個資料庫的權限
REVOKE ALL PRIVILEGES ON DATABASE database_name FROM username;
-- 請將 `database_name` 替換為欲移除權限的資料庫名稱,將 `username` 替換為欲移除權限的使用者名稱。
```