2015-10-06 57 views
1

我是PostgreSQL的新手。我正在开发一个项目,将我们的MSSQL数据库转换为PostgreSQL。现在我们所有的表和列都使用扩展属性(MS_Description)进行记录。我希望能够保留所有这些描述,但似乎无法弄清楚是否有办法将这些描述转换为PostgreSQL。有关我如何做到这一点的任何想法?我总是可以将信息转储到数据字典表中,但不希望将信息与实际的表/列分开。PostgreSQL ms_description相当于?

回答

2

使用COMMENT命令,如:

comment on table test is 'My favotite table'; 
comment on column test.id is 'Primary key of my favorite table'; 

要检索SQL这些注释使用的功能(见Table 9-60. Comment Information Functions):

select obj_description('test'::regclass, 'pg_class'); 
    obj_description 
------------------- 
My favotite table 
(1 row) 

select col_description('test'::regclass, 1); 
     col_description   
---------------------------------- 
Primary key of my favorite table 
(1 row) 
+0

这是许多其他DBMS也使用(甲骨文,DB2,火鸟,HSQLDB,...) –

+0

感谢这么多的语法!这非常有帮助。 – Helen

1

对于任何人需要做到这一点,这里是脚本我根据@ klin的答案编写了从MS SQL获取描述并创建所需的PostgreSQL命令。第一个选择构建表描述和第二构建列描述:

SELECT N'comment on table '+ Lower(o1.[name]) 
    + N' is ''' + CAST(s1.value AS NVARCHAR(4000)) + ''';' 
FROM sys.objects o1 
    INNER JOIN sys.extended_properties s1 on o1.object_id = s1.major_id 
WHERE o1.type = 'U' 
    AND s1.name = 'MS_Description'  
UNION 
SELECT N'comment on column '+ Lower(o2.[name]) + '.' + Lower(c.[name]) 
    + N' is ''' + CAST(s2.value AS NVARCHAR(4000)) + ''';' 
FROM sys.objects o2 
    INNER JOIN sys.columns c ON o2.object_id = c.object_id 
    INNER JOIN sys.extended_properties s2 on o2.object_id = s2.major_id 
WHERE o2.type = 'U' 
    AND c.column_id = s2.minor_id 
    AND s2.name = 'MS_Description';