SQL - 插入postgresql表会在分号

时间:2016-07-29 16:24:55

标签: sql postgresql

我正在尝试将一些测试数据插入到表中以检查Web servlet的功能,但是,使用pgAdmin4进行插入,我遇到了一个问题,我不知道如何纠正。我想看到的是此测试信息的最后一个值(图像字节流)为空。这是我的插入声明:

INSERT INTO schema.tablename("Test Title", "Test Content", "OldWhovian", "2016-07-29 09:13:00", "1469808871694", "null");

我回来了:

ERROR:  syntax error at or near ";"
LINE 1: ...ldWhovian", "2016-07-29 09:13:00", "1469808871694", "null");
                                                                      ^
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 122

我试图删除分号只是为了踢,而是在关闭括号上的错误。这是与null相关的问题吗?我尝试这样做而不在null周围加上引号我得到了相同的错误但是在null而不是分号。感谢任何帮助,我是DBA / DBD相关活动的新手。

相关:使用PostgreSql 9.6

1 个答案:

答案 0 :(得分:1)

insert语句通常包含第一部分,您指定要插入的列 ,第二部分指定要插入的值

INSERT INTO table_name (column1, column2) VALUES (value1, value2);

只有在第二部分中提供所有值时,才需要指定哪些列部分。如果你有一个包含七列的表,你可以省略第一部分,如果在第二部分你提供七个值。

INSERT INTO table_name VALUES (value1, value2, value3, ...);

示例:

drop table if exists my_table;
create table my_table (
    id int not null,
    username varchar(10) not null,
    nockname varchar(10),
    created timestamptz
);

INSERT INTO my_table (id, username) VALUES (1, 'user01');

您可以在列ID和用户名中插入。创建的列具有指定的默认值,因此当您不在insert中提供值时,将使用默认值。 Nickname和identification_number可以接受空值。如果没有提供值,则使用NULL。

INSERT INTO my_table VALUES (2, 'user02', NULL, NULL, current_timestamp);

这与前一个相同,但这里省略了第一部分,因此您必须为所有列提供值。如果你没有,你会收到错误。

如果要插入多个值,可以使用多个语句。

INSERT INTO my_table (id, username, identification_number) VALUES (3, 'user03', 'BD5678');
INSERT INTO my_table (id, username, created) VALUES (4, 'user04', '2016-07-30 09:26:57');

或者您可以使用postgres简化此类插入。

INSERT INTO my_table (id, username, nickname, identification_number) VALUES 
    (5, 'user05', 'fifth', 'SX59445'),
    (6, 'user06', NULL, NULL),
    (7, 'user07', NULL, 'AG1123');

开头我写过,只有在第二部分中为所有列提供值时,才能省略第一部分(指定列的位置)。这不完全正确。在特殊情况下,如果您的表具有可为空的列(可以包含NULL值的列)或者您指定了DEFAUL值,则还可以省略第一部分。

create sequence my_seq start 101;
create table my_table2 (
    id              int             not null default nextval('my_seq'),
    username        varchar(10)     not null default 'default',
    nickname        varchar(10),
    identification_number   varchar(10),
    created         timestamptz     default current_timestamp
);

INSERT INTO my_table2 DEFAULT VALUES;
INSERT INTO my_table2 DEFAULT VALUES;
INSERT INTO my_table2 DEFAULT VALUES;

结果:

101   default   NULL   NULL  2016-07-30 10:28:27.797+02
102   default   NULL   NULL  2016-07-30 10:28:27.797+02
103   default   NULL   NULL  2016-07-30 10:28:27.797+02

如果未指定值,则使用默认值或null。在上面的示例中,id列具有来自sequence的默认值,username具有默认字符串“default”,如果未指定,则nickname和identification_number为null,并且创建的默认值为当前时间戳。

更多信息:

PostgreSQL INSERT