如何在特定的表空间中使用postgres数据库设置django?

时间:2011-11-15 15:58:01

标签: python django postgresql settings psycopg2

你期望的是什么::

settings.py

DATABASES = {
    'default': {
        'NAME': 'db_name',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'host',
        'PORT': '5432',
        'DEFAULT_TABLESPACE': 'tablespace-name',
    }
}

当我使用DEFAULT_TABLESPACE时,我希望使用此默认表空间授予访问权限。但是我在那里使用的并不重要。另外,如果我在模型Meta类中明确使用db_tablespace,那么我无法做任何事情。

我也试过不同的用户,但即使用户postgres也行不通。如果我定义db_table =“tablespace.tablename”,它也不起作用。

可行的SQL:

select count(*) from schemaname.tablename

我对数据库进行了备份并在本地恢复,而不创建表空间。它导入良好并忽略表空间。然后就行了。

如何使用带有表空间的postgres配置Django?还是schemaname?其实我对此一无所知,所以我希望你们能帮助我。

另请参阅:https://docs.djangoproject.com/en/dev/topics/db/tablespaces/

使用Django 1.3.1,postgresql 8.4,psycopg2

更新

使用表空间时似乎没有选择“默认架构”。我尝试了一些测试,这是使用./manage.py dbshel​​l的结果:

这对没有表空间的数据库有效,但对带有表空间的数据库不起作用:

select * from parameter;

这适用于两个数据库:

select * from tablespace.parameter;

不幸的是,数据库设置中的“DATABASE_SCHEMA”选项不起作用,模型Meta对象中的“db_schema”也不起作用。所以问题现在有点清楚了。有人有解决方案吗?

1 个答案:

答案 0 :(得分:4)

架构和表空间是两回事。

schema本质上是一个命名空间。 tablespace是文件系统中的一个位置。模式是合乎逻辑的事物;表空间是物理的东西。

如果您尝试将一组相关表(可能还有其他命名对象)组合在一起,则需要一个模式。

如果您试图通过将索引放在快速SSD磁盘(与表,视图等不同的磁盘)上来提高速度,那么您需要一个表空间。