我不确定我的问题是连接到Scala Play 2.5.x Framework还是PostgreSQL,所以我将描述我的设置。
我正在使用来自BigSQL Sandboxes的Play 2.5.6与Scala和PostgreSQL 9.5.4-2。我使用Play Framework默认进化包来管理数据库版本。
我在BigSQL Sandbox中创建了一个新数据库,PGSQL和PGSQL创建了一个名为public的默认模式。我使用这个模式进行开发。
我想创建一个包含以下脚本的表(在DB evolution config中为1.sql
):
# Initialize the database
# --- !Ups
CREATE TABLE user (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL,
creation_date TIMESTAMP NOT NULL
);
# --- !Downs
DROP TABLE user;
除此之外,我想用这样的代码阅读表格:
val resultSet = statement.executeQuery("SELECT id, name, email FROM public.user WHERE id=" + id.toString)
如果我想执行任何提到的代码,或者即使我在pgadmin中使用CREATE TABLE...
代码,我也会收到错误。问题在于user
表名。如果我用public
作为前缀(即public.user
),一切正常。
我的问题是:
public
架构设为默认选项,以便我不必限定表名? (例如CREATE TABLE user (...);
不会抛出错误)我尝试了以下内容:
search_path
:ALTER USER my_user SET search_path to public;
search_path
:ALTER database "my_database" SET search_path TO my_schema;
search_path
正确地显示了这一点:"$user",public
我收到了以下错误:
p.a.d.e.DefaultEvolutionsApi - ERROR: syntax error at or near "user"
在pgadmin:
错误:用户"
处或附近的语法错误第1行:CREATE TABLE用户(
**********错误**********
错误:用户"
处或附近的语法错误SQL状态:42601
字符:14
答案 0 :(得分:2)
这与默认架构无关。 user
是保留字。
您需要使用双引号才能创建此类表:
CREATE TABLE "user" (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL,
creation_date TIMESTAMP NOT NULL
);
但我强烈建议不这样做。查找不需要带引号的标识符的其他名称。