AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / 问题

Perguntas[alter-table](dba)

Martin Hope
ogirginc
Asked: 2022-05-13 03:14:43 +0800 CST

É seguro usar o valor padrão com não nulo ao adicionar uma nova coluna?

  • 3

Temos um aplicativo Rails desenvolvido com Postgresql v11.4 onde quero adicionar uma nova coluna com um valor padrão e uma restrição not null como abaixo:

ALTER TABLE "blogs" ADD "published" boolean DEFAULT FALSE NOT NULL

Eu sei que adicionar uma nova coluna com um valor padrão é seguro. No entanto, ainda é seguro quando combinado com NOT NULL? Ou bloqueará o banco de dados? Obrigado!

postgresql alter-table
  • 1 respostas
  • 2156 Views
Martin Hope
ankit.vishen
Asked: 2022-02-22 23:03:34 +0800 CST

Erro de entrada Mysql Duplicate durante a adição de nova coluna no banco de dados de produção

  • 0

Tenho uma tabela MySQL que possui 95929357 registros, abaixo segue o esquema da tabela para o mesmo

CREATE TABLE `Friends` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createdTime` datetime DEFAULT NULL,
  `friendUserId` bigint(20) DEFAULT NULL,
  `friendshipStatus` int(11) DEFAULT NULL,
  `remarks` varchar(255) DEFAULT NULL,
  `updatedTime` datetime DEFAULT NULL,
  `userId` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `userId` (`userId`,`friendUserId`),
  KEY `createdTime` (`createdTime`)
) ENGINE=InnoDB AUTO_INCREMENT=1321597934 DEFAULT CHARSET=latin1

tenho duas perguntas a fazer

Questão 1# Se tiver apenas 95929357 registros, como o AUTO_INCREMENT aumenta para 1321597934(Nota-entradas são inseridas por código com valor padrão 0). Também notei que há uma lacuna no id (exp- do id 50001124 para o novo id 50001393)

| 50001122 | 2021-09-19 03:33:06 |    116176872 |                0 | NULL    | 2021-09-19 03:33:06 | 103802246 |
| 50001123 | 2021-09-19 03:33:06 |    114361519 |                0 | NULL    | 2021-09-19 03:33:06 | 116176872 |
| 50001124 | 2021-09-19 03:33:06 |    116176872 |                0 | NULL    | 2021-09-19 03:33:06 | 114361519 |
| 50001393 | 2021-09-19 03:33:07 |    109233877 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001394 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 109233877 |
| 50001395 | 2021-09-19 03:33:07 |    105588884 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001396 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 105588884 |
| 50001397 | 2021-09-19 03:33:07 |    106198652 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001398 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 106198652 |

Pergunta 2 # Eu estava tentando adicionar uma nova coluna com o comando abaixo

ALTER TABLE Friends ADD COLUMN source INT(11) DEFAULT '0';

mas ficando abaixo do erro enquanto a tabela altera

ERROR 1062 (23000): Duplicate entry '126750770-127846472' for key 'userId'

ATUALIZAR -

Selecione o resultado da chave acima

mysql> select * from Friends where userId = 126750770 AND friendUserId = 127846472;
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| id         | createdTime         | friendUserId | friendshipStatus | remarks | updatedTime         | userId    | source |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| 1120753287 | 2022-01-27 12:36:12 |    127846472 |                0 | NULL    | 2022-01-27 12:36:12 | 126750770 |      0 |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
1 row in set (0.00 sec)

mysql> select * from Friends where userId = 127846472 AND friendUserId = 126750770;
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| id         | createdTime         | friendUserId | friendshipStatus | remarks | updatedTime         | userId    | source |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| 1120753288 | 2022-01-27 12:36:12 |    126750770 |                0 | NULL    | 2022-01-27 12:36:12 | 127846472 |      0 |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
1 row in set (0.00 sec)
mysql alter-table
  • 1 respostas
  • 333 Views
Martin Hope
Tran Triet
Asked: 2021-09-17 02:05:26 +0800 CST

Postgresql explica alterar tabela adicionar coluna não funciona

  • 1

Estou usando o Postgresql 12 (AWS RDS) e o pgAdmin4.

Enquanto a seguinte declaração funciona

explain select * from table "Commands";

O proximo

explain alter table "Commands" drop column "test";

dá esse erro

LINE 1: explain alter table "Commands" drop column "test";
                ^
SQL state: 42601
Character: 9

Assegurei-me de que a instrução alter table "Commands" drop column "test"em si possa ser executada com êxito, portanto, isso não pode ser um problema com essa instrução.

Não explainfunciona com alterou estou faltando alguma coisa?

postgresql alter-table
  • 2 respostas
  • 608 Views
Martin Hope
Life after Guest
Asked: 2021-08-30 02:22:03 +0800 CST

Alterar a coluna do banco de dados mysql causa erro em outra coluna

  • 1

Em primeiro lugar, desculpe a todos se esta pergunta parece muito básica.

Eu tenho um banco de dados Wordpress e uma tabela wp_comments.

Nesta tabela, tenho dois DATETIMEcampos, cujo valor padrão é 0000-00-00 00:00:00.

Eu preciso alterar esse valor para CURRENT_TIMESTAMP, então por exemplo eu executo a seguinte consulta:

ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

Portanto, comment_date(NOT comment_date_gmt) é a coluna a ser modificada.

Agora, quando executo esta consulta, recebo o seguinte erro:

Error 1067: Invalid default value for comment_date_gmt

Por que isso está acontecendo? O que eu poderia fazer?

[ATUALIZAR]

Esta é a tabela:

CREATE TABLE `wp_comments` (
  `comment_ID` bigint(20) UNSIGNED NOT NULL,
  `comment_post_ID` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `comment_author` tinytext NOT NULL,
  `comment_author_email` varchar(100) NOT NULL DEFAULT '',
  `comment_author_url` varchar(200) NOT NULL DEFAULT '',
  `comment_author_IP` varchar(100) NOT NULL DEFAULT '',
  `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_content` text NOT NULL,
  `comment_karma` int(11) NOT NULL DEFAULT '0',
  `comment_approved` varchar(20) NOT NULL DEFAULT '1',
  `comment_agent` varchar(255) NOT NULL DEFAULT '',
  `comment_type` varchar(20) NOT NULL DEFAULT 'comment',
  `comment_parent` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `user_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `wp_comments`
  ADD PRIMARY KEY (`comment_ID`),
  ADD KEY `comment_post_ID` (`comment_post_ID`),
  ADD KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
  ADD KEY `comment_date_gmt` (`comment_date_gmt`),
  ADD KEY `comment_parent` (`comment_parent`),
  ADD KEY `comment_author_email` (`comment_author_email`(10));

A versão do MySQL é 5.7.33

[ATUALIZAR]

Não sei POR QUE, mas sei COMO resolvi esse problema:

ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFY `comment_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

Dessa forma, modificando os dois campos juntos , não recebo erros.

Funciona, mas ainda estou bastante curioso, então se tiver alguma ideia para compartilhar... :-)

mysql alter-table
  • 1 respostas
  • 30 Views
Martin Hope
Titiksha
Asked: 2021-07-23 02:37:18 +0800 CST

Como renomear um nome de coluna que foi criado por uma função matemática no mysql? Usando ALTER TABLE está dando ERRO: 1064 (42000)

  • 1

ENTRADA:

CREATE TABLE dist
-> SELECT ST_DISTANCE(POINT(x1,y1),POINT(x2,y2))
-> FROM config;

RESULTADO:

+------------------------------------------+
| ST_DISTANCE(POINT(x1,y1) , POINT(x2,y2)) |
+------------------------------------------+
|                        140.0071426749364 |
|                       139.30183056945089 |
|                        138.6001443000692 |
|                       137.90213921473443 |
|                       137.20787149431334 |
+------------------------------------------+

RENOMEAR ENTRADA DA COLUNA

> ALTER TABLE dist
-> RENAME COLUMN ST_DISTANCE(POINT(x1,y1),POINT(x2,y2)) TO Values;

ERRO: 1064 (42000): Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta a ser usada perto de '(POINT(x1,y1),POINT(x2,y2)) TO Values' na linha 2

mysql alter-table
  • 2 respostas
  • 250 Views
Martin Hope
LaVache
Asked: 2021-06-26 18:53:19 +0800 CST

Converter uma coluna postgres GENERATED em uma coluna regular não gerada (no local sem DROP)

  • 2

Estou usando o postgres 13.3 e já tenho uma tabela existente com uma GENERATEDcoluna como:

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)
);

Mas agora mudei de ideia e quero que isso seja apenas uma coluna regular não gerada que eu possa editar manualmente ...

  • Mas eu quero evitar ter que DROPrecriar a coluna
  • E quero manter os valores existentes que já estão na coluna no momento

Isso é possível? Qual seria a ALTERconsulta para fazer isso para a the_column_to_altercoluna?

postgresql alter-table
  • 1 respostas
  • 1020 Views
Martin Hope
Dirk Boer
Asked: 2021-04-10 19:57:27 +0800 CST

Por que você não pode adicionar uma identidade a uma coluna existente no SQL Server?

  • 1

O que há de tão especial em uma coluna de identidade ?

Tenho certeza de que há um motivo válido, mas estou tentando entender melhor o SQL.

Então, o que há de tão especial em uma coluna de identidade que não pode ser facilmente adicionada em retrospectiva?

Por que isso não é apenas um único sinalizador int/bigint em algum lugar que está sendo incrementado toda vez que você insere uma nova linha?

Existe algo fisicamente armazenado por linha que este é um processo difícil?

sql-server alter-table
  • 5 respostas
  • 466 Views
Martin Hope
DaleJV
Asked: 2020-09-02 22:53:08 +0800 CST

Como você altera os parâmetros de armazenamento de uma tabela já feita (desenvolvedor sql)?

  • 0

Resuma o problema Recebi 6 tabelas que já foram criadas e me disseram para alterar os parâmetros de armazenamento dessas tabelas. o problema que encontro é que só posso alterar pctfree, pctused, initrans e max trans e não os outros (initial, next, pctincrease e maxextents)

Forneça detalhes e qualquer pesquisa

Eu fiz muita pesquisa, mas alguns deles não funcionam com o desenvolvedor sql. Enquanto os outros funcionam, mas conforme indicado apenas para os 4 parâmetros de armazenamento.

Quando apropriado, descreva o que você tentou

alter table CUSTOMERS
pctused 20 pctfree 80;

Isso funciona perfeitamente para esses dois, mas não consigo adicionar os outros. Pelo que encontrei online, essa foi de fato a única coisa que funcionou para mim.

Eu aprecio todas as entradas!

oracle alter-table
  • 1 respostas
  • 359 Views
Martin Hope
DBA Greg14
Asked: 2020-08-27 22:28:50 +0800 CST

alterar tabela alterar coluna causa um enorme crescimento de arquivos de log e dados

  • 0

Eu tenho uma tabela com 2,6B linhas e preciso alterar uma coluna de Char(1) para Varchar(64). a tabela tem mais de 300 GB com alguns índices. A coluna em nullable, então a transação que estou executando é:

ALTER TABLE XXXX ALTER COLUMN YYYYY varchar(64) NULL

Eu entendo que esta é uma operação registrada, então eu pré-dimensionei o log de transações para 300 GB pensando que seria suficiente especialmente com backups de log a cada 5 minutos para permitir a reutilização do espaço de log. bem, o log de transações cresceu para 812 GB antes de eu ter que cancelar a transação devido a problemas de espaço em disco.

Também experimentei um aumento muito grande no tamanho do arquivo de dados USADO, que não sei por que isso aconteceria. O tamanho do arquivo de dados usado chegou a cerca de 200 GB (transações muito mínimas são feitas neste banco de dados, então eu sei que o aumento é desse comando alter table).

Eu tenho algumas questões:

  1. Por que os arquivos de dados experimentariam um aumento ao mudar apenas de char(1) para varchar(64)? Fiquei com a impressão de que isso não deve alterar a quantidade de dados armazenados, a menos que esse espaço seja realmente necessário desde seu varchar. todos os valores existentes eram nulos ou 1 byte, pois char(1) é o tipo de dados existente, nenhum dado existente precisa ser expandido.
  2. Enquanto tentava descobrir como fazer isso melhor, me deparei com esta resposta de Aaron Bertrand e parece que funcionaria no meu caso também. essa seria uma maneira melhor de realizar essa tarefa?
  3. esse banco de dados está em um AG de confirmação síncrona de 2 nós e notei que o redo_queue_size chegou a mais de 130 GB, o que significa que o primário estava enviando dados de log em um ritmo mais rápido do que o secundário poderia aplicá-los. Isso significa que o log no primário não pôde ser truncado quando os backups de log foram concluídos. isso é um comportamento normal para algo assim? a instrução alter column é processada como uma grande transação? se assim for, isso explicaria por que o log continuou crescendo.
transaction-log alter-table
  • 1 respostas
  • 204 Views
Martin Hope
viniciustr
Asked: 2020-06-13 10:36:58 +0800 CST

Alter coluna falha devido à estatística "oculta"

  • 0

Estou tentando alterar um tipo de dados de coluna de datetime2para datetimeoffset. Eu tenho permissões de proprietário de banco de dados.

Sempre que executo a consulta:

alter table dbo.<my-table>
alter column [TimeStamp] datetimeoffset

Eu recebi a seguinte mensagem de erro:

As estatísticas 'Stat_a41cbd7f968a4cba86199c960f6f7c3a' dependem da coluna 'TimeStamp'.

ALTER TABLE ALTER COLUMN TimeStamp falhou porque um ou mais objetos acessam esta coluna.

No entanto, parece que essa estatística 'Stat_a41cbd7f968a4cba86199c960f6f7c3a' não está presente na minha sys.statstabela, o que é muito estranho.

Existe algum outro local que possa ser definido?

Editar: Não há uma única entrada sys.statschamada 'Stat_a41cbd7f968a4cba86199c960f6f7c3a'. Além disso, nunca defini nenhuma estatística personalizada além das automáticas.

sql-server alter-table
  • 1 respostas
  • 726 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve