我使用 pg_restore 用转储文件加载我的 postgres 数据库。我与我的用户连接到我的数据库:
sudo -u arajguru psql dump
select current_user;
current_user
--------------
arajguru
Run Code Online (Sandbox Code Playgroud)
现在我能够看到所有新创建的表:
dump=> \dt
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+----------
public | Approvals | table | arajguru
public | Approvers | table | arajguru
public | Conditions | table | arajguru
public | Entities | table | arajguru
public | EntityDefinitions | table | arajguru
public | Projects | table | arajguru
public | Rules | table | arajguru
public | …
Run Code Online (Sandbox Code Playgroud) 我正在设计一个项目,该项目指定表中的列名应该是什么,规范中的列名之一是“组”。
我尝试创建它,但它总是在单词 = 附近抛出语法错误"group"
。我真的很好奇,因为 SQL 中的关键字是“group by”而不是 group,所以是什么原因,我无法重命名或创建带有名称的列"group".
我正在使用和得到的语法和错误:
ALTER TABLE test RENAME COLUMN sum TO group;
ERROR: syntax error at or near "group"
LINE 1: ALTER TABLE test RENAME COLUMN sum TO group;
Run Code Online (Sandbox Code Playgroud) SQL-92 标准的第 5.6 节包含规则 10...13,其中未加引号的标识符应大写,因此foo
变为FOO
但"foo"
仍然是foo
。
例如,Oracle、IBM DB2、Snowflake和ksqlDB遵守这些规则,但Postgres 、MySQL 或 SQLite 则不遵守这些规则。
问题是,为什么?根据我的理解,在具有大量关键字的语言中可选地引用标识符是有意义的。标识符一致的区分大小写或不区分大小写也是有意义的。但让它依赖于被引用的标识符看起来并不合理。
我缺少什么?
我正在尝试执行以下语句,该语句创建一个名为 service2019 的数据库:
DECLARE @dbname VARCHAR(50);
SET @dbname = 'service' + CAST(YEAR(GETDATE()) AS VARCHAR(4));
EXEC (
'CREATE DATABASE ' + @dbname + ' ON PRIMARY
( NAME =' + '' + @dbname +'' + ', FILENAME = ''C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014TEST\MSSQL\DATA\''' + '''' + @dbname + '''' + '''.mdf''' + ', SIZE = 10MB , MAXSIZE = UNLIMITED, FILEGROWTH = 100KB )
LOG ON
( NAME =' + '' + @dbname + '_log' + ', FILENAME = ''C:\Program Files\Microsoft SQL …
Run Code Online (Sandbox Code Playgroud) sql-server dynamic-sql t-sql sql-server-2014 quoted-identifier