То, как я могу добавить столбец к базе данных Postgresql, которая не позволяет, аннулирует?

мы можем даже писать так, создавая новый объект String в классе и назначая ему то, что когда-либо хотим в конструкторе, и возвращаем его в метод toString, который переопределен

public class Student{  
 int id;  
 String name;  
 String address;  
 String details;
 Student(int id, String name, String address){  
 this.id=id;  
 this.name=name;  
 this.address=address;  
 this.details=id+"  "+name+"  "+address;  
 }  

//overriding the toString() method  
public String toString(){ 
  return details;  
 }  
 public static void main(String args[]){  
   Student s1=new Student(100,"Joe","success");  
   Student s2=new Student(50,"Jeff","fail");  

   System.out.println(s1);//compiler writes here s1.toString()  
   System.out.println(s2);//compiler writes here s2.toString()  
 }  
}
228
задан Huuuze 4 February 2009 в 17:33
поделиться

6 ответов

Необходимо установить значение по умолчанию.

ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL DEFAULT 'foo';

... some work (set real values as you want)...

ALTER TABLE mytable ALTER COLUMN mycolumn DROP DEFAULT;
371
ответ дан Luc M 4 November 2019 в 13:20
поделиться

Как другие заметили, необходимо или создать nullable столбец или обеспечить ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ. Если это не достаточно гибко (например, если Вам нужно новое значение, которое будет вычислено для каждой строки индивидуально так или иначе), можно использовать то, что в PostgreSQL, все команды DDL могут быть выполнены в транзакции:

BEGIN;
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50);
UPDATE mytable SET mycolumn = timeofday();    -- Just a silly example
ALTER TABLE mytable ALTER COLUMN mycolumn SET NOT NULL;
COMMIT;
73
ответ дан j_random_hacker 4 November 2019 в 13:20
поделиться

Или необходимо определить значение по умолчанию или сделать то, что говорит Sean, и добавьте его без пустого ограничения, пока Вы не заполнили его на существующих строках.

5
ответ дан Paul Tomblin 4 November 2019 в 13:20
поделиться

Так как строки уже существуют в таблице, ALTER, оператор пытается вставить NULL в недавно созданный столбец для всех существующих строк. Необходимо было бы добавить столбец как разрешение NULL, затем заполнить столбец значениями, которые Вы хотите и затем устанавливаете его на NOT NULL впоследствии.

48
ответ дан Sean Bright 4 November 2019 в 13:20
поделиться

Определение значения по умолчанию также работало бы, предполагая, что значение по умолчанию является соответствующим.

2
ответ дан Ryan Graham 4 November 2019 в 13:20
поделиться

Или, составьте новую таблицу как временный файл с дополнительным столбцом, скопируйте данные в эту новую таблицу при управлении им по мере необходимости, чтобы заполнить не допускающий NULL-значения новый столбец и затем подкачать таблицу через двухступенчатую смену имени.

Да, это более сложно, но Вы, возможно, должны сделать это этот путь, если Вы не хотите большое ОБНОВЛЕНИЕ на живой таблице.

1
ответ дан alphadogg 4 November 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: