我不確定是否我的問題連接到Scala Play 2.5.x Framework或PostgreSQL,所以我將描述我的設置。如何在使用PostgreSQL的Scala Play項目中使'公共'模式默認?
我使用Play 2.5.6與Scala和PostgreSQL 9.5.4-2從BigSQL Sandboxes。我使用Play Framework默認演變包來管理數據庫版本。
我在BigSQL Sandbox的PGSQL和PGSQL中創建了一個新數據庫,創建了一個名爲public的默認模式。我使用這個模式進行開發。
我想創建一個表與下面的腳本(1.sql
在DB進化配置):
# 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用戶(
********** Error **********
錯誤:在語法錯誤或接近 「用戶」
SQL狀態:42601
字符:14
這是解決方案,謝謝!我覺得這個錯誤信息在這種情況下並不真正有用。順便說一下,我做了一個簡短的研究,看看爲什麼我沒有在Google上發現它。我應該搜索階段「創建表用戶」。這樣我可以找到你的其他答案:http://stackoverflow.com/questions/22256124/cannot-create-a-database-table-named-user-in-postgresql :)我去了「user_account」的名稱。 –