postgresql基本语句

本文介绍PgSQL数据库的基本操作,包括通过命令行界面进行查询、创建数据库及用户、查看表结构等,并提供了关于如何更改服务器监听设置及从客户端连接服务器的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

preface,熟悉pgsql sql Language article disorder;

1,pgsql数据库控制台Cli(command line interface) help mannual;

注意\g == ; terminate with semicolon to execute query

SQL command help

psql command help

2,基于shell创建psql 数据库及owner user

createuser,createdb --superuser 加此参数,在新建user登进psql看看命令提示符是=#(超级用户命令行提示符) 还是=>普通用户提示符;

 3,显示当前用户下的表及表结构

4,切换数据库连接

mysql中是用use + dbName

[Note byRuiy tip memorize]

  • \l:列出所有数据库。
  • \c [database_name]:连接其他数据库。
  • \d:列出当前数据库的所有表格。
  • \d [table_name]:列出某一张表格的结构。
  • \du:列出所有用户。

    \[shell-based createPsqlUser]创建psql数据库及用户;

sudo -u postgres createuser --superuser dbuser

sudo -u postgres psql

\password dbuser

sudo -u postgres createdb -O dbuser exampledb

(使用psql control)

useradd ruiy;

sudo -U postgres -d postgres -h 127.0.0.1 -p 5432

create user ruiy with password '321';

create database ruiy owner ruiy;

grant all privileges on database ruiy to ruiy;

5,psql服务器监听设置及客户端连接

pg_ctl restart

<think>我们正在讨论PostgreSQL中的IF语句。根据引用[2],PostgreSQL支持几种条件语句形式,包括IF-THEN、IF-THEN-ELSE和IF-THEN-ELSIF-ELSE。这些语句通常用于PL/pgSQL代码块中(例如在函数或存储过程中),因为标准的SQL查询中并不直接支持过程式的IF语句。 在PL/pgSQL中,IF语句基本语法如下: 1. **IF-THEN**: ```sql IF boolean-expression THEN statements; END IF; ``` 2. **IF-THEN-ELSE**: ```sql IF boolean-expression THEN statements; ELSE statements; END IF; ``` 3. **IF-THEN-ELSIF-ELSE**: ```sql IF boolean-expression THEN statements; ELSIF boolean-expression THEN statements; ELSIF boolean-expression THEN statements; ELSE statements; END IF; ``` 注意:在PostgreSQL中,我们使用`ELSIF`而不是`ELSEIF`或`ELSE IF`。 下面通过几个示例来说明IF语句的用法: ### 示例1:在函数中使用IF-THEN-ELSE 创建一个函数,根据输入的分数返回对应的等级。 ```sql CREATE OR REPLACE FUNCTION get_grade(score INTEGER) RETURNS VARCHAR AS $$ BEGIN IF score >= 90 THEN RETURN 'A'; ELSIF score >= 80 THEN RETURN 'B'; ELSIF score >= 70 THEN RETURN 'C'; ELSIF score >= 60 THEN RETURN 'D'; ELSE RETURN 'F'; END IF; END; $$ LANGUAGE plpgsql; ``` 调用函数: ```sql SELECT get_grade(85); -- 返回 'B' ``` ### 示例2:在DO匿名块中使用IF-THEN 如果我们想临时执行一段条件逻辑,可以使用匿名块(DO语句)。 ```sql DO $$ DECLARE current_hour INT := EXTRACT(HOUR FROM CURRENT_TIME); BEGIN IF current_hour < 12 THEN RAISE NOTICE 'Good morning!'; ELSIF current_hour < 18 THEN RAISE NOTICE 'Good afternoon!'; ELSE RAISE NOTICE 'Good evening!'; END IF; END; $$; ``` 这个匿名块会根据当前时间的小时数输出不同的问候语。 ### 注意事项: - IF语句只能在PL/pgSQL代码块中使用(例如在函数、存储过程或匿名块中)。 - 在标准的SQL语句中,我们可以使用`CASE`表达式来实现条件分支。例如: ```sql SELECT score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' WHEN score >= 60 THEN 'D' ELSE 'F' END AS grade FROM exam_scores; ``` 因此,在编写PostgreSQL代码时,根据上下文选择使用IF语句(在PL/pgSQL中)或CASE表达式(在SQL中)。 §§相关问题§§ 1. PostgreSQL中IF语句和CASE表达式有什么区别? 2. 如何在PostgreSQL存储过程中使用条件控制? 3. 除了IF语句PostgreSQL还支持哪些流程控制语句?</think>### PostgreSQL中IF语句的用法与示例 在PostgreSQL中,`IF`语句属于**过程化编程语言(PL/pgSQL)**的流程控制结构,主要用于函数、存储过程和匿名代码块(DO语句)中。以下是详细用法和示例: #### 一、基本语法形式 1. **IF-THEN**(单分支) ```sql IF condition THEN statements; END IF; ``` 2. **IF-THEN-ELSE**(双分支) ```sql IF condition THEN statements; ELSE alternative_statements; END IF; ``` 3. **IF-THEN-ELSIF**(多分支) ```sql IF condition1 THEN statements1; ELSIF condition2 THEN -- 注意是ELSIF不是ELSEIF statements2; ELSE fallback_statements; END IF; ``` > ⚠️ 注意:`ELSIF`是PostgreSQL的特定拼写(非标准SQL的`ELSE IF`)[^2]。 --- #### 二、实际应用示例 **示例1:在函数中验证年龄** ```sql CREATE OR REPLACE FUNCTION check_adult(age INT) RETURNS TEXT AS $$ BEGIN IF age >= 18 THEN RETURN 'Adult'; ELSE RETURN 'Minor'; END IF; END; $$ LANGUAGE plpgsql; -- 调用 SELECT check_adult(20); -- 返回 'Adult' SELECT check_adult(15); -- 返回 'Minor' ``` **示例2:匿名块处理折扣逻辑** ```sql DO $$ DECLARE total_price NUMERIC := 1000; discount_rate NUMERIC; BEGIN IF total_price > 2000 THEN discount_rate := 0.2; ELSIF total_price > 1000 THEN discount_rate := 0.1; ELSE discount_rate := 0.05; END IF; RAISE NOTICE '最终折扣率: %', discount_rate; -- 输出: 0.1 END; $$; ``` **示例3:嵌套IF处理复杂条件** ```sql CREATE OR REPLACE FUNCTION inventory_check( product_id INT, required_qty INT ) RETURNS BOOLEAN AS $$ DECLARE current_stock INT; BEGIN SELECT stock INTO current_stock FROM products WHERE id = product_id; IF current_stock IS NULL THEN RAISE EXCEPTION '产品不存在'; ELSIF current_stock >= required_qty THEN RETURN TRUE; -- 库存充足 ELSE RETURN FALSE; -- 库存不足 END IF; END; $$ LANGUAGE plpgsql; ``` --- #### 三、与SQL CASE表达式的区别 | 特性 | IF语句 | CASE表达式 | |--------------|----------------------------|--------------------------| | 使用场景 | PL/pgSQL过程代码 | SQL查询语句 | | 返回值 | 可执行多行代码 | 只能返回单一值 | | 错误处理 | 支持RAISE/EXCEPTION | 无 | | 执行逻辑 | 过程化控制流 | 表达式求值 | **示例对比:** ```sql -- IF语句(过程化) IF user_status = 'VIP' THEN discount := 0.15; log_vip_activity(); -- 可调用其他函数 END IF; -- CASE表达式(SQL查询) SELECT product_name, CASE WHEN stock > 100 THEN '充足' WHEN stock > 50 THEN '正常' ELSE '不足' END AS stock_status FROM products; ``` --- #### 四、关键注意事项 1. **作用域限制**:`IF`语句仅在PL/pgSQL代码块中有效,普通SQL查询需用`CASE`表达式 2. **严格类型检查**:条件表达式必须返回布尔值(`TRUE/FALSE/NULL`) 3. **NULL处理**:`IF NULL THEN ...` 不会执行分支,需用`IS NULL`显式检查 4. **性能优化**:复杂嵌套逻辑建议拆分成多个函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值