PostgreSQL创建用户:用户名无需单引号、密码需单引号的原因
PostgreSQL中CREATE USER语句用户名与密码的引号区别
这本质是SQL语法里标识符和字面量的规则差异,和"都是字符串"没关系:
- 用户名是数据库的标识符(类似表名、列名,属于数据库对象的名称):
- 只要用户名符合PostgreSQL的合法标识符规则(仅含字母、数字、下划线,且不以数字开头),就不需要加引号;
- 如果用户名包含特殊字符、空格,或者是SQL保留字,才需要用双引号包裹(注意不是单引号),比如:
CREATE USER "test-user" WITH PASSWORD 'test_pass';
- 密码是字符串字面量,是你要存入数据库的具体值:
- SQL语法规定所有字符串字面量必须用单引号包裹,要是不用单引号,PostgreSQL会把它当成标识符去解析,直接报错找不到对应的数据库对象。
举个反例验证:如果密码不加单引号写成WITH PASSWORD test_password,PostgreSQL会尝试去找名为test_password的标识符(比如某个变量或对象),显然不存在,就会抛出语法错误。
内容的提问来源于stack exchange,提问作者vtm11
相关产品推荐
相关产品推荐

