标签: alter-table

PostgreSQL - 如何重命名 CamelCase 列?

当我尝试像这样重命名 CamelCase 列时:

ALTER TABLE mytable RENAME COLUMN camelCaseColumn TO camel_case_column;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR: column "camelcasecolumn" does not exist
Run Code Online (Sandbox Code Playgroud)

用单引号将 CamelCase 列名称括起来,如下所示:

ALTER TABLE mytable RENAME COLUMN 'camelCaseColumn' TO camel_case_column;
Run Code Online (Sandbox Code Playgroud)

给我一个语法错误。

有什么办法可以重命名该列吗?或者我必须创建一个新表并传输数据?

数据库在 Ubuntu 上运行,我使用 Mac OS X ssh 到运行数据库的服务器以发出命令ALTER TABLE。我知道 Mac OS X 不区分大小写,所以这可能是问题的一部分吗?

谢谢!

postgresql alter-table

5
推荐指数
1
解决办法
1万
查看次数

为什么向 MySQL 表添加列需要花费非常长的时间?

我使用的是 MySQL 5.6 版,并且我有一个总大小约为 110 GB 的数据库。其中一张表“输出”的大小为 49 GB。我尝试使用以下命令向输出表添加一个简单的 BOOL 列

ALTER TABLE outputs add spent BOOL;
Run Code Online (Sandbox Code Playgroud)

该查询花了 6 天零 9 小时才完成。没有添加索引,因为它是只有两个可能值的列。有谁知道为什么这个相对简单的查询会花费这么长时间?仅供参考,输出表有一个主键列和另外两个已索引的列。它共有 9 列。如果需要有关我的 mysql 配置的更多信息,我可以编辑这篇文章,但我需要知道哪些参数很重要。

mysql alter-table

5
推荐指数
1
解决办法
9749
查看次数

如何使用变量的值设置列 DEFAULT

在设置使用随机 UUID 作为主键的数据库的脚本中,我有:

CREATE TABLE alpha (id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), value INT);
CREATE TABLE beta (aref UUID REFERENCES alpha (id));

INSERT INTO alpha (value) VALUES (42);
Run Code Online (Sandbox Code Playgroud)

然后通过外键,让“alpha”中的记录成为插入“beta”表的默认目标:

DO $$
    DECLARE l_id UUID;
    BEGIN
        SELECT alpha.id FROM alpha INTO l_id;
        ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id;
    END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
ERROR:  column "l_id" does not exist
CONTEXT:  SQL statement "ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id"
PL/pgSQL function inline_code_block line 1 at SQL statement …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql default-value alter-table plpgsql

5
推荐指数
1
解决办法
4661
查看次数

SSMS 中表的哪些更改会导致 DROP/CREATE,并且可以使用 TSQL 始终避免这种情况吗?

我知道在某些情况下,通过 SSMS 的 GUI 对表进行某些更改(例如,更改列的类型)将导致表被删除并重新创建。

我的问题是,对于导致这种行为的具体变化是否存在完整的定义?通过运行而不是使用 SSMS GUI 是否可以始终避免这种行为ALTER TABLE(如果不能,哪些可以避免,哪些不能)?

sql-server ssms t-sql alter-table

5
推荐指数
1
解决办法
206
查看次数

为什么删除的索引仍然存在,它是否可以防止表被更改?

我有一个列(名为RequestDate),我需要将其从 更改NULLNOT NULL,但是该列上有一个聚集索引,因此我首先需要删除该索引。

最初,索引是使用以下方法创建的:

CREATE CLUSTERED INDEX IX_RequestDate   
    ON [MyDB].[dbo].[MyTable] (RequestDate); 
Run Code Online (Sandbox Code Playgroud)

为了放弃它,我执行了:

Drop Index IX_RequestDate On [MyDB].[dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)

然后尝试使用以下方法更改列无效性:

ALTER TABLE [MyDB].[dbo].[MyTable] ALTER COLUMN [RequestDate] DATETIME NOT NULL
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误:

对象“MyTable”依赖于“RequestDate”列。

然后我MyTable使用这个查询列出了的索引,并且索引仍然存在,尽管现在它没有名称并且它的类型是HEAP(最初CLUSTERED):

TableName   IndexName   IndexType   ColumnOrdinal   ColumnName     ColumnType
MyTable        NULL       HEAP         0            RequestDate     datetime
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么下降的索引还在?
  2. 由于这个仍然存在的索引,我是否得到了上面的依赖错误?
    如果是这样,我该如何删除它?
    如果没有,还有什么我应该检查的吗?我想避免丢掉桌子。

请注意,此表没有任何限制。

我使用的是 SQL Server 2014、OS Windows Server 2012 R2,以下是SCRIPT TABLE AS -> CREATE TO(我更改了一些列名)的输出:

CREATE TABLE [dbo].[MyTable]( …
Run Code Online (Sandbox Code Playgroud)

index sql-server alter-table dependencies

5
推荐指数
1
解决办法
87
查看次数

将 postgres GENERATED 列转换为常规非生成列(无需 DROP 就地)

我使用的是 postgres 13.3,并且我已经有一个现有的表,其中有一GENERATED列,例如:

CREATE TABLE test_table (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    the_column_to_alter bool NOT NULL GENERATED ALWAYS AS (2 > 1) STORED,
    CONSTRAINT test_table2_pkey PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

但我现在改变了主意,我希望它只是一个常规的非生成列,我可以手动编辑......

  • 但我想避免重新DROP创建该列
  • 我想保留目前列中已有的值

这可能吗?ALTER对列执行此操作的查询是什么the_column_to_alter

postgresql alter-table generated-columns

5
推荐指数
1
解决办法
2592
查看次数

将时间戳列更改为时间戳而不“转换”数据?

似乎将列从 更改为timestamp without time zonetimestamp with time zone根据语句时的当前会话时区转换现有数据alter

\n

请参阅此示例,每个语句后显示输出

\n
create table tztest (col1 timestamp without time zone);\n\nset timezone = 'UTC';\ninsert into tztest (col1) values ('2023-02-01 10:10:10');\nselect col1 as t1, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10    1675246210\n\nset timezone = 'America/New_York';\nalter table tztest alter column col1 type timestamp with time zone;\nselect col1 as t2, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10-05 1675264210\n\nset timezone = 'UTC';\nselect col1 as t3, extract(epoch FROM col1) …
Run Code Online (Sandbox Code Playgroud)

postgresql alter-table timezone

5
推荐指数
1
解决办法
2144
查看次数

按指定列对表进行预排序

我有一张表,我总是通过订购一列来获取数据。就我而言,我按 订购datenum。但是,由于排序,选择是如此缓慢。

是否可以在datenum. 此列被定义为唯一的。如果定义为索引,选择会更快吗?

mysql innodb myisam order-by alter-table

4
推荐指数
2
解决办法
1万
查看次数

在事务中修改表结构?

在 Oracle(也可能在其他地方)中,执行 ALTER TABLE 语句将对当前事务进行隐式提交。

我们有一个工具(用 Java 编写)应该通过以下方式修改模式:

  • 添加一些列
  • 删除一些列
  • 使用新的架构布局更新描述表

编写的工具将向用户显示当前模式布局并允许他对其进行修改。(基本上是向某些表添加或删除自定义“属性”列)一旦他满意,他就可以应用他的更改。

请注意:基本架构布局以及您需要通过 ALTER TABLE 更改某些内容这一事实是由标准预定义的,我们无法更改,因为其他工具将不再起作用。

现在的问题是我们不能在单个事务中运行这些更改,因为 AFAIK,不可能在一个事务中执行多个 ALTER TABLE 语句。

如果在应用更改时出现问题,我们有哪些选项可以“回滚”到初始状态?

注意:这里有人提出了 RESTORE POINT + FLASHBACK——从这个(Java)工具调用它是个好主意吗?(在一些应该使用该工具的站点上,我们没有完全控制数据库实例。)

注意:Oracle 10g2 及以上

schema oracle flashback alter-table

4
推荐指数
1
解决办法
5225
查看次数

SQL Server:如何在 T-SQL 中删除表上的所有约束

我想删除数据库中所有表的所有约束,因为我需要更改许多表的关系。

有没有办法用 T-SQL 做到这一点?我找不到任何解决方案和代码,例如:

ALTER TABLE testDB.dbo.testTable1
DROP ALL CONSTRAINT
GO
Run Code Online (Sandbox Code Playgroud)

不起作用。

constraint t-sql sql-server-2008-r2 alter-table

4
推荐指数
1
解决办法
1万
查看次数