PostgreSQL用SQL建表并导入CSV数据时报COPY语法错误如何解决
问题原因
你编写的SQL将CREATE TABLE建表语句和COPY数据导入语句直接拼接,没有添加PostgreSQL要求的SQL语句终止符;,导致语法解析器把COPY识别为CREATE TABLE的语法组成部分,触发语法错误。
修正方案
- 第一步:在
CREATE TABLE语句末尾添加;,将两个独立SQL语句拆分 - 第二步:根据使用场景选择合适的导入语法:
- 如果是在PostgreSQL服务器本机操作,且postgres服务进程拥有该CSV文件的读取权限,可以继续使用服务端
COPY语法 - 如果是在本地客户端连接远程PostgreSQL,或者服务进程没有文件读取权限,建议替换为psql客户端命令
\copy,直接读取本地客户端的CSV文件
- 如果是在PostgreSQL服务器本机操作,且postgres服务进程拥有该CSV文件的读取权限,可以继续使用服务端
修正后完整SQL示例
-- 建表语句 CREATE TABLE teacher ( DAILY_ALLOWANCE INTEGER, DATE_OF_BIRTH DATE, EMAIL VARCHAR(35), FIRST_NAME VARCHAR(35), FULL_NAME VARCHAR(35), ID VARCHAR(35), NAME VARCHAR(35), NUMBER_OF_STUDENTS INTEGER, OWNERID VARCHAR(35), SALARY INTEGER, TEACHER_UNIQUE_ID VARCHAR(15), YEARS_OF_EXPERIENCE INTEGER ); -- 数据导入语句(服务端COPY版本) COPY teacher ( DAILY_ALLOWANCE, DATE_OF_BIRTH, EMAIL, FIRST_NAME, FULL_NAME, ID, NAME, NUMBER_OF_STUDENTS, OWNERID, SALARY, TEACHER_UNIQUE_ID, YEARS_OF_EXPERIENCE ) FROM 'C:\Users\Surendra Anand R\Desktop\Note!\Files\Teacher.csv' CSV HEADER; -- 本地psql客户端导入可替换为以下语句,无需服务端文件权限 -- \copy teacher (DAILY_ALLOWANCE,DATE_OF_BIRTH,EMAIL,FIRST_NAME,FULL_NAME,ID,NAME,NUMBER_OF_STUDENTS,OWNERID,SALARY,TEACHER_UNIQUE_ID,YEARS_OF_EXPERIENCE) FROM 'C:\Users\Surendra Anand R\Desktop\Note!\Files\Teacher.csv' CSV HEADER;
内容的提问来源于stack exchange,提问作者Surendra Anand
相关产品推荐
相关产品推荐

