postgresql 怎么同时更改字段和默认值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql 怎么同时更改字段和默认值相关的知识,希望对你有一定的参考价值。
参考技术A 修改字段的 attnumfrancs=> c francs postgres
You are now connected to database "francs" as user "postgres".
francs=# update pg_attribute set attnum=4 where attrelid='francs.test_6'::regclass and attname='col3';
UPDATE 1
francs=# update pg_attribute set attnum=3 where attrelid='francs.test_6'::regclass and attname='col2';
UPDATE 1
francs=# update pg_attribute set attnum=2 where attrelid='francs.test_6'::regclass and attname='col3';
UPDATE 1
francs=# select * from francs.test_6;
col1 | col3 | col2
------+------+------
1 | 2 | 3
4 | 5 | 6
(2 rows)
备注:修改系统表 pg_attribute ,更改表 francs.test_6 字段的 attnum 值,结果发现只是字段名称
换了下顺序,而字段中的值却没有更改,显然通过修改系统表 pg_attribute.attnum 值是行不通
的,更进一步,假设这步成功了,如果表字段上有索引,或者约束,那么还得修改相应的系统表,
显然修改数据库系统表的做法是危险的,容易给数据库带来灾难,万不得已,不建议这么做。
既然直接修改系统表字段顺序的方法行不通,那么可以通过其它间接的方法,这里想到了两种,
第一种是重建表,即新建表结构再把老表数据导进去。第二种是新建一个符合规则的视图,以
后应用程序不直接查原表,而是查视图。
错误:Postgresql 中的日期/时间字段值超出范围
【中文标题】错误:Postgresql 中的日期/时间字段值超出范围【英文标题】:ERROR: date/time field value out of range in Postgresql 【发布时间】:2017-05-25 05:48:26 【问题描述】:我有一个从 Oracle 存储过程生成的 ASCII 编码的 CSV 文件。
我需要使用存储过程将 CSV 文件导入 Postgres 数据库表,默认情况下在 postgres 中 set date to MDY
我昨晚确实尝试在 postgres 终端中set datestyle to SQL,DMY;
。
今天早上,当我看到 datastyle 格式为 MDY 格式时。除非它在 postgres.conf 文件中配置,但我不需要它,因为它适用于所有数据库。
所以我需要在存储过程中导入CSV文件时设置日期样式
这是 Postgres 的脚本
begin
set schema 'public';
raise notice 'CSV PATH: %,TABLE NAME: %',csv_path,target_table;
execute format('truncate %I ',target_table);
execute format('copy %I from %L WITH (FORMAT csv)',target_table, csv_path);
return;
end;
【问题讨论】:
我回滚到以前的版本,因为你没有编辑它 - 你问了一个新问题。请让新人这样做 这里是永久设置日期样式的链接dba.stackexchange.com/questions/19679/… “所以我需要在存储过程中导入CSV文件时设置日期样式”?... 我认为在不准确的不同方法中最好使用数据库命令 【参考方案1】:设置交易使用的配置local
。 https://www.postgresql.org/docs/current/static/sql-set.html
SESSION 如果 SESSION 和 LOCAL 均未出现,则为默认值
(我的粗体字)
例如:
t=# begin;
BEGIN
t=# set local DateStyle to ISO,DMY;
SET
t=# show DateStyle;
DateStyle
-----------
ISO, DMY
(1 row)
t=# end;
COMMIT
t=# show DateStyle;
DateStyle
-----------
ISO, MDY
(1 row)
还要注意如何设置 DateStyle - 它是一对值。
https://www.postgresql.org/docs/current/static/runtime-config-client.html
日期样式(字符串)
设置日期和时间值的显示格式以及规则 用于解释不明确的日期输入值。由于历史原因, 这个变量包含两个独立的组件:输出格式 规范(ISO、Postgres、SQL 或德语)和输入/输出 年/月/日排序规范(DMY、MDY 或 YMD)。这些 可以单独设置,也可以一起设置。关键字 Euro 和 European 是 DMY 的同义词;关键字 US、NonEuro 和 NonEuropean 是 MDY 的同义词。有关详细信息,请参阅第 8.5 节。内置的 默认是ISO,MDY,但是initdb会初始化配置文件 具有与所选 lc_time 的行为相对应的设置 语言环境。
【讨论】:
以上是关于postgresql 怎么同时更改字段和默认值的主要内容,如果未能解决你的问题,请参考以下文章