通过 psql 和 puTTY 连接到 Postgres 时出现 auto_increment 错误

发布于 2025-01-04 14:22:51 字数 1046 浏览 3 评论 0原文

我在 PuTTY 中遇到此错误。不知道为什么,对我来说看起来不错......

psql:pierre.sql:10: ERROR:  syntax error at or near "AUTO_INCREMENT"
LINE 2:  c_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                ^
psql:pierre.sql:18: ERROR:  syntax error at or near "AUTO_INCREMENT"
LINE 2:  r_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

--DROP TABLE customer, reservation;
CREATE TABLE customer(
    c_id        INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    c_ref       VARCHAR(30) NOT NULL,
    f_name      VARCHAR(30) NOT NULL,
    l_name      VARCHAR(30) NOT NULL,
    address     VARCHAR(100) NOT NULL,
    email       VARCHAR(100) NOT NULL,
    phone       VARCHAR(11) NOT NULL
);
CREATE TABLE reservation(
    r_id        INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    c_id        VARCHAR(30) NOT NULL REFERENCES customer(c_id),
    book_date   DATE NOT NULL CHECK (book_date <= now()),
    s_time      DOUBLE NOT NULL,
    e_time      DOUBLE NOT NULL,
    amount      INTEGER NOT NULL
);

有什么想法吗?

I'm getting this error in puTTY. Not sure why, looks right to me ...

psql:pierre.sql:10: ERROR:  syntax error at or near "AUTO_INCREMENT"
LINE 2:  c_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                ^
psql:pierre.sql:18: ERROR:  syntax error at or near "AUTO_INCREMENT"
LINE 2:  r_id  INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

--DROP TABLE customer, reservation;
CREATE TABLE customer(
    c_id        INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    c_ref       VARCHAR(30) NOT NULL,
    f_name      VARCHAR(30) NOT NULL,
    l_name      VARCHAR(30) NOT NULL,
    address     VARCHAR(100) NOT NULL,
    email       VARCHAR(100) NOT NULL,
    phone       VARCHAR(11) NOT NULL
);
CREATE TABLE reservation(
    r_id        INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    c_id        VARCHAR(30) NOT NULL REFERENCES customer(c_id),
    book_date   DATE NOT NULL CHECK (book_date <= now()),
    s_time      DOUBLE NOT NULL,
    e_time      DOUBLE NOT NULL,
    amount      INTEGER NOT NULL
);

Any ideas why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抠脚大汉 2025-01-11 14:22:51

auto_increment 看起来就像你在 MySQL 中使用的东西一样。

但是,在这里,您似乎正在使用 PostgreSQL。

根据数据类型serial部分,postgresql 相当于 auto_increment 的是 serialbigserial

引用该页面:

数据类型 serialbigserial 不是真正的类型,而仅仅是
设置唯一标识符列的符号方便
(类似于其他一些数据库支持的 AUTO_INCRMENT 属性)

auto_increment looks like something you'd use with MySQL.

But, here, it seems you are using PostgreSQL.

According to the datatype serial section of the manual, postgresql's equivalent of auto_increment is serial or bigserial.

Quoting that page :

The data types serial and bigserial are not true types, but merely
a notational convenience for setting up unique identifier columns
(similar to the AUTO_INCREMENT property supported by some other databases).

终止放荡 2025-01-11 14:22:51

Postgres 10 或更高版本中,考虑 IDENTITY 列:(

CREATE TABLE customer(
    c_id        INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    ...

PRIMARY KEY 也使其NOT NULL< /code> 自动。)

详细信息:

Postgres 9.6 或更早版本中,考虑像 Pascal 这样的序列已经建议了
也适用于第 10 页或更高版本,但 IDENTITY 通常更优越。

In Postgres 10 or later consider an IDENTITY column:

CREATE TABLE customer(
    c_id        INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    ...

(PRIMARY KEY also makes it NOT NULL automatically.)

Details:

In Postgres 9.6 or older consider a serial like Pascal already suggested.
Works in pg 10 or later, too, but IDENTITY is generally superior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文