postgresql - 为什么sql文件的格式会影响它们是否可以在PG中运行?
问题描述
我在我的docker-entrypoint-initdb.d/
目录中放置了一个文件。这是文件中的内容:
CREATE TABLE user_test (
user_id INTEGER,
name VARCHAR(100),
email VARCHAR(128),
active_flg BOOLEAN,
type VARCHAR(20),
CONSTRAINT pk_user PRIMARY KEY (user_id)
);
我得到的错误是psql:/docker-entrypoint-initdb.d/0001-initial-database-design.sql:8: ERROR: syntax error at or near "CREATE"
.
能够运行文件我缺少什么?如何更改此文件以使其正常工作?
解决方案
USER
是 Postgres 中的保留关键字,请参阅文档。通常,您应该避免使用保留的 SQL 关键字来命名表和列。如果您真的想按原样继续,请user
放入双引号:
CREATE TABLE "user" (
user_id INTEGER,
name VARCHAR(100),
email VARCHAR(128),
active_flg BOOLEAN,
type VARCHAR(20),
CONSTRAINT pk_user PRIMARY KEY (user_id)
);
但是,请记住,如果您选择命名 table user
,那么您将永远不得不用双引号对其进行转义。
推荐阅读
- excel - 为 n 列中的值生成所有可能的组合 - 其中 n 可以变化(VBA)
- javascript - 以正确的方式格式化 Jquery 脚本
- python - 多维状态动作空间平铺比使用 np.meshgrid 更有效的方法?
- php - sqlsrv_connect 工作正常,但 laravel 失败:TCP Provider: No connection could be made because the target machine positively denied it
- docker - Docker不保存使用python创建的文件 - Flask应用程序
- redis - 如何使用 Redis 5.x 禁用持久性
- authorization - Apache AuthzSendUnauthorizedOnFailure?
- google-cloud-platform - 在 GCP 上,如何授予对另一个项目中服务帐户的访问权限?
- excel - Excel VBA:当另一个单元格包含特定文本或字符串时如何清除指定单元格的内容
- java - 如何使用 Spring Boot 为传记后端制作实体类和控制器?