首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过一次PostgreSQL 9.1查询将TABLE all column从not null更改为null

如何通过一次PostgreSQL 9.1查询将TABLE all column从not null更改为null
EN

Stack Overflow用户
提问于 2016-02-25 20:27:27
回答 2查看 248关注 0票数 0

我将数据从MySQL数据库迁移到PostgreSQL数据库,并错误地将PostgreSQL数据库中的所有列设置为非空。

在此之后,我面临着插入数据的问题,并且必须手动取消选中not null,那么是否有办法对表中的所有列(除了id(主键) )执行此操作。

我也有这个查询单列,但它也很耗时,

代码语言:javascript
复制
ALTER TABLE <table name> ALTER COLUMN <column name> DROP NOT NULL;
EN

回答 2

Stack Overflow用户

发布于 2016-02-25 20:58:55

我不认为有这方面的内置功能。但是编写一个函数来做这件事是很容易的。例如:

代码语言:javascript
复制
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;

像这样使用它:

代码语言:javascript
复制
SELECT set_nullable('my_table');
票数 1
EN

Stack Overflow用户

发布于 2016-02-25 20:31:03

只需使用与当前表相同的结构执行新的CREATE TABLE noNULL,并修改所需的NULLable字段。

然后从旧表插入

代码语言:javascript
复制
INSERT INTO noNULL 
      SELECT *
      FROM oldTable

然后删除oldTable并重命名noNull -> oldTable

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35627293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档