当前位置: 首页 > 知识库问答 >
问题:

如何在使用PostgreSQL的Scala Play项目中使“公共”模式默认?

江鹏
2023-03-14

我不确定我的问题是否连接到Scala Play 2.5. x Framework或PostgreSQL,所以我将描述我的设置。

我使用的是Scala的Play 2.5.6和BigSQL沙箱中的PostgreSQL 9.5.4-2。我使用Play框架默认演进包来管理DB版本。

我在BigSQL Sandbox的PGSQL中创建了一个新的数据库,PGSQL创建了一个名为public的默认模式。我使用此架构进行开发。

我想使用以下脚本(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),一切正常。

我的问题是:

  1. 每次在表名前面加上架构名的前缀是正常的吗?这对我来说似乎很奇怪。
  2. 如何将公共架构设置为默认选项,这样我就不必限定表名?(例如,创建表用户 (...); 不会抛出错误)

我尝试了以下方法:

  1. 我为我的用户设置了search_path将用户MY_USER设置为公共search_path;
  2. 我为我的数据库设置了search_path更改数据库“my_database”将search_path设置为my_schema;
  3. search_path正确显示:“$user”,公共

我得到了以下错误:

>

  • 在播放中:p.a.d.e.DefaultEvolutionsApi - 错误:在“user”处或附近出现语法错误
  • 在pgadmin中:

    错误:语法错误在“用户”或附近

    第1行:创建表用户(

    错误 **********

    错误:语法错误在“用户”或附近

    SQL 状态:42601

    人物:14

  • 共有1个答案

    申屠裕
    2023-03-14

    这与默认模式无关。user是一个保留字。

    您需要使用双引号才能创建这样的表:

    CREATE TABLE "user" (
        id SERIAL PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT NOT NULL,
        creation_date TIMESTAMP NOT NULL
    );
    

    但我强烈建议不要这样做。找到一个不需要引用标识符的不同名称。

     类似资料:
    • 问题内容: 我了解Singleton,但无法在Android项目中使用它。我是Android的初学者。请告诉我如何在Android项目中将Singleton用于大数据。我已将其用于简单值。 问题答案: Android中的Singleton与Java中的Singleton相同: 一个基本的Singleton类示例:

    • Plagiarize, plagiarize, plagiarize / Only be sure always to call it, please research. Lobachevsky — Tom Lehrer 如果你对自己编制的代码有疑问,使用他人的吧。在许多情况下, 当你要写一个 Puppet 模块来管理一些软件或服务时,不必从头开始编写。 对许多流行的应用程序,在 Puppet F

    • 我现在的做法是在主项目中将组件放到window中 子项目在window中获取 并且注册到app 但是使用过程中发现如果组件中有插槽slot 那么子组建使用时会报错 Cannot read properties of null (reading 'isCE') 我看网上说是vue版本不一致导致的,但是我检查了我的主项目与子项目的vue版本是一样的 请问大佬们 有没有什么解决的方法 或者有其他主子应用

    • null 原因是我两次调用;一次是从组件的安装的子类实例,另一次是从组件的安装的子类实例。 在中只安装一个实例是不可取的,因为实现了一个特定的绑定器方法,对于该方法,我只知道和中的参数。 我试图通过将和各自的主要Guice模块包装在中来解决这一问题。但是,此操作失败,出现下一个错误: 无法为%s创建绑定。它已经配置在一个或多个子注入器或私有模块上%s%n如果它在PrivateModule中,是否忘

    • 我无法在我的应用程序中获得一个业务逻辑。谁能帮我一下,我是android开发新手。 顺便说一句,我正在使用Android回收视图来显示项目列表,并且我需要显示已检查的项目已标记为签入回收视图。 我正在从服务器上查看项目:兴趣列表:[“古董收藏”、“工艺品”、“划船”] 这些项目需要与我的recyclerView ArrayList或项目进行比较。如果这些项目在RecyclerViewer中可用,我

    • 问题内容: 有什么方法可以在Maven中的父项目的模块之间共享资源?例如,我想为一个多模块Maven项目中的所有模块指定一个log4j.properties文件。 通常,我使用Eclipse IDE通过选择常规项目来创建父项目,然后通过指定的包装将其转换为Maven项目。这将创建一个没有and等文件夹的“干净”项目结构。我不知道在这种情况下应该在哪里放置这样的共享资源。 EDIT1 :我想将公共资