我需要以“MMDDYYYY'
格式上传数据我用来通过psql发送的当前方式代码
SET BaseFolder=C:\
psql -h hostname -d database -c "\copy test_table(id_test,
colum_test,columndate DATEFORMAT 'MMDDYYYY')
from '%BaseFolder%\test_table.csv' with delimiter ',' CSV HEADER;"
这里test_table是postgres DB中的表
Id_test: float8 Column_test: float8 columndate: timestamp
id_test colum_test colum_date
94 0.3306 12312017
16 0.3039 12312017
25 0.5377 12312017
88 0.6461 12312017
当我在Windows 10中的CMD中运行上述查询时,我收到以下错误
错误:日期/时间字段值超出范围:" 12312017"
提示:也许你需要一个不同的" datestyle"设置。
上下文:COPY test_table,第1行,列columndate:" 12312017"
答案 0 :(得分:0)
这是日期的可怕格式。不要{3}}您的日期类型,break您的数据为更合理的格式。
=> select to_date('12312017', 'MMDDYYYY');
to_date
------------
2017-12-31
答案 1 :(得分:0)
DATEFORMAT适用于整个COPY命令,而不是单个字段。
我按照以下方式开始工作......
您的COPY命令表明数据是逗号分隔,因此我使用此输入数据并将其存储在 Amazon S3存储桶中:
id_test colum_test,colum_date
94,0.3306,12312017
16,0.3039,12312017
25,0.5377,12312017
88,0.6461,12312017
我创建了一个表:
CREATE TABLE foo (
foo_id BIGINT,
foo_value DECIMAL(4,4),
foo_date DATE
)
然后加载数据:
COPY foo (foo_id, foo_value, foo_date)
FROM 's3://my-bucket/foo.csv'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Role'
CSV
IGNOREHEADER 1
DATEFORMAT 'MMDDYYYY'
请注意,将数据加载到Amazon Redshift的推荐方法是来自存储在Amazon S3中的文件。 (我还没有尝试使用Redshift的本地psql
复制命令,并建议不要使用它 - 特别是对于大型数据文件。你当然不能将Redshift COPY命令中的命令混合到psql中复制命令。)
然后,我跑了SELECT * FROM foo
并返回:
16 0.3039 2017-12-31
88 0.6461 2017-12-31
94 0.3306 2017-12-31
25 0.5377 2017-12-31