我将我的数据从MySQL数据库迁移到PostgreSQL数据库,并且错误地认为我在PostgreSQL数据库中的所有列都设置为非空。
在此之后我面临插入数据的问题,并且必须手动取消选中非空,所以有任何方法可以对表中的所有列进行操作(除了id(PRIMARY KEY))。
我也有单列查询,但也很费时,
ALTER TABLE <table name> ALTER COLUMN <column name> DROP NOT NULL;
答案 0 :(得分:1)
我认为没有内置的功能。但是编写一个函数来实现这一点很容易。例如:
CREATE OR REPLACE FUNCTION set_nullable(relation TEXT)
RETURNS VOID AS
$$
DECLARE
rec RECORD;
BEGIN
FOR rec IN (SELECT * FROM pg_attribute
WHERE attnotnull = TRUE AND attrelid=relation::regclass::oid AND attnum > 0 AND attname != 'id')
LOOP
EXECUTE format('ALTER TABLE %s ALTER COLUMN %s DROP NOT NULL', relation, rec.attname);
RAISE NOTICE 'Set %.% nullable', relation, rec.attname;
END LOOP;
END
$$
LANGUAGE plpgsql;
像这样使用:
SELECT set_nullable('my_table');
答案 1 :(得分:0)
只需使用与当前表相同的结构执行新的CREATE TABLE noNULL
,然后修改所需的NULLable
字段。
然后从旧表中插入
INSERT INTO noNULL
SELECT *
FROM oldTable
然后删除oldTable
并重命名noNull -> oldTable