postgresql修改的简单介绍

如何修改PostgreSQL中一个表的oid

oid是一个系统的隐藏列。直接修改是不行的。

专注于为中小企业提供成都网站建设、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业清涧免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

mysql=# update pg_class set oid = 99999 where oid=73728;

ERROR: cannot assign to system column "oid"

LINE 1: update pg_class set oid = 99999 where oid=73728;

但是我们可以将其删除

mysql=# delete from pg_class where oid=73728;

DELETE 1

在postgresql中有一个copy命令,有一个参数 with oids,可以将oid一起导入,利用这个特性,我们可以达到oid的修改功能。

1.首先新建一个文件,将数据放入,新的oid已修改

[mysql@pttest4 cxf]$ cat 2.dat

73740|test|2200|73729|10|0|73740|0|0|0|0|0|f|f|r|1|0|0|0|0|0|f|f|f|f|814|/N|/N

2.使用copy命令导入数据

copy pg_class from '/home/mysql/cxf/2.dat' null as E'//N' csv delimiter '|' oids;

3.修改其他表中的对应oid数据

update pg_attribute set attrelid ='73740' where attrelid ='73728';

update pg_depend set refobjid='73740' where refobjid ='73728';

update pg_type set typrelid ='73740' where typrelid = '73728';

ps:如果还涉及其他的数据字典,应一并修改掉

4.查询,可以看出oid已变更

mysql=# select * from test;

ERROR: could not open relation 1663/16386/73740: No such file or directory

mysql=# select oid from pg_class where relname ='test';

oid

-------

73740

(1 row)

5.将数据文件更名为新的oid

[mysql@pttest4 16386]$ mv 73728 73740

再查数据库,原有的那条数据还是可以访问到的。

mysql=# select * from test;

a

---

1

(1 row)

至此,oid修改成功。

修改oid引发的其他问题。由于当前系统的oid是73735,而我们变更的oid(73740)在这个之后,接着我们创建表的时候这个oid还会重用,这样有可能会造成oid错乱。如下

mysql=# create table helloworld(b varchar(1));

CREATE TABLE

mysql=# select oid from pg_class where relname='helloworld';

oid

-------

73735

(1 row)

mysql=# create table helloworld1(b varchar(1));

CREATE TABLE

mysql=# create table helloworld2(b varchar(1));

CREATE TABLE

mysql=# create table helloworld3(b varchar(1));

CREATE TABLE

mysql=# select oid from pg_class where relname like 'helloworld%';

oid

-------

73735

73737

73739

73741

(4 rows)

mysql=# select * from pg_type where oid = '73740';

typname | typnamespace | typowner | typlen | typbyval | typtype | typisdefined | typdelim | typrelid | typelem | typinput | typoutput | typreceive | typsend | typanalyze | typalign | typstorage | typnotnull | typbasetype | typtypmod | typndims | typdefaultbin | typdefault

-------------+--------------+----------+--------+----------+---------+--------------+----------+----------+---------+-----------+------------+-------------+-------------+------------+----------+------------+------------+-------------+-----------+----------+---------------+------------

helloworld2 | 2200 | 10 | -1 | f | c | t | , | 73739 | 0 | record_in | record_out | record_recv | record_send | - | d | x | f | 0 | -1 | 0 | |

(1 row)

可以看到,新的pg_type的oid用到了73740。

为了避免这种情况,我们可以用pg_resetxlog重置oid。

如:pg_resetxlog -o 80000 ~/postgresql/data/

这样子建表的时候oid就重80000开始了,避免了刚刚那个问题。

怎么修改postgresql.conf

postgresql.conf是PostgreSQL的配置文件。其基本格式为: 一行就是一个配置变量的设定,采用"变量名 = 变量值"的赋值格式。

postgresql.conf一般位于postgresql的数据目录中,它是在postgresql数据集创建时自动创建出来的。可以通过修改postgresql.conf来修改PostgreSQL的配置变量值。

如何设置或更改PostgreSQL数据目录位置

Services Management”即“服务”中停止相应的PostgreSQL服务

方式二:通过命令行“NET STOPpostgresql-x64-9.1”停止相应的PostgreSQL服务Step 2:修改注册表对应键值位置在"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-9.1

\ImagePath

",将“-D”后的目录名修改为新的数据目录位置即可,如果目录路径中含有空格,需要用引号引起。Step 3:数据迁移

拷贝数据至新数据目录,需要注意必须检查用户权限是否可于访问新的数据目录。Step 4:开启PostgreSQL服务

或者使用命令行命令“NETSTARTpostgresql-x64-9.1”[Linux]修改postgresql.conf文件,

data_directory = '

新数据目录名'

,然后重启postgresql服务即可。

修改完毕后,可以用psql命令“showdata_directory”查看当前数据目录

如何修改postgresql数据库字符集

要想打开自动字符集转换功能,你必须告诉 PostgreSQL 你想在客户端使用的字符集(编码)。你可以用好几种方法实现这个目的。

用 psql 里的 /encoding 命令。 /encoding 允许你动态修改客户端编码。 比如,把编码改变为 SJIS,键入:

/encoding SJIS

使用 libpq 函数。 /encoding 在做此用途的时候实际上是调用 PQsetClientEncoding()。

int PQsetClientEncoding(PGconn *conn, const char *encoding);

这里 conn 与后端的联接,而 encoding 是你想用的编码。如果编码设置成功它返回 0,否则返回 -1。本次联接的当前编码可以用下面函数显示:

int PQclientEncoding(const PGconn *conn);

请注意它只返回编码 ID,而不是象 EUC_JP 这样的编码符号字串。 要把编码 ID 转换为编码符号,你可以用:

char *pg_encoding_to_char(int encoding_id);

使用 SET client_encoding TO。 可以用 SQL 命令设置客户端编码:

SET CLIENT_ENCODING TO 'value';

你还可以把 SQL 语法里的 SET NAMES用于这个目的:

SET NAMES 'value';

查询当前客户端编码:

SHOW client_encoding;

返回缺省编码:

RESET client_encoding;

使用 PGCLIENTENCODING。 如果在客户端的环境里定义了 PGCLIENTENCODING 环境变量, 那么在与服务器进行联接时将自动选择客户端编码。 (这个编码随后可以用上面谈到的任何其它方法覆盖。)

使用client_encoding配置变量。 如果在 postgresql.conf 里设置了 client_encoding 变量, 那么在与服务器建立了联接之后,这个客户端编码将自动选定。(这个设置随后可以被上面提到 的其他方法覆盖。)

假如无法进行特定的字符转换 — 比如, 你选的服务器编码是EUC_JP, 客户端是LATIN1,那么有些日文字符不能转换成LATIN1。这时, 不能用LATIN1字符集表示的字母将被转换成圆括弧包围的十六进制,像,(826C) 这样。

如果客户端字符集定义成了 SQL_ASCII,那么编码转换会被关闭, 不管服务器的字符集是什么都一样。和服务器一样,除非你的工作环境全部是 ASCII 数据, 否则使用 SQL_ASCII 是不明智的。

postgresql linux怎么改密码

1、首先,要用CRT软件连接Linux系统。

2、首选,确认是用root用户登录系统的。

输入命令:

id

,查看登录用户信息。3、若修改root自己的密码,直接输入

passwd

.

输入两遍,新密码即可。

4、若修改其他用户,如oracle

的密码,可直接输入passwd

oracle.

输入两遍性新密码即可。

5、这样就修改成功了。

linux下修改pgsql的data路径

1. 修改配置文件/etc/postgresql/9.3/main/postgresql.conf

data_directory = '/home/pgdata'

2. 修改data_directory的所有者

chown -R postgres:postgres /home/pgdata

3. 这时候启动会报error

* The PostgreSQL server failed to start. Please check the log output:

2014-11-25 09:55:02 CST FATAL: data directory "/home/pgdata" has group or world access

2014-11-25 09:55:02 CST DETAIL: Permissions should be u=rwx (0700).

根据提示修改数据目录权限

chmod 700 /home/pgdata

4. 启动依然会报错

* The PostgreSQL server failed to start. Please check the log output:

2014-11-25 09:56:17 CST FATAL: "/home/pgdata" is not a valid data directory

2014-11-25 09:56:17 CST DETAIL: File "/home/pgdata/PG_VERSION" is missing.

把默认数据目录的东西拷贝过来

cp -r /var/lib/postgresql/9.3/main/* /home/pgdata

5. 启动 service postgresql start


本文题目:postgresql修改的简单介绍
转载注明:http://ybzwz.com/article/dscdioe.html