Sql Postgres从不同的表导入
我对博士后还是相当陌生的。我有一个名为:Sql Postgres从不同的表导入,sql,postgresql,database-migration,Sql,Postgresql,Database Migration,我对博士后还是相当陌生的。我有一个名为:university\u table的表,其中包含字段:name, 国籍,缩写,形容词,人 我发现此sql查询可从以下位置插入数据: 下面的查询片段。 如何更改查询以将这些值插入myuniversity\u country表 --创建并加载国籍表-英语 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Nationality]') AND type in
university\u table
的表,其中包含字段:name,
国籍,缩写,形容词,人
我发现此sql查询可从以下位置插入数据:
下面的查询片段。
如何更改查询以将这些值插入myuniversity\u country
表
--创建并加载国籍表-英语
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Nationality]') AND type in (N'U'))
DROP TABLE [dbo].[Nationality]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-------------------------------------------------------------------
-- TABLE: [dbo].[Nationality]
-- Creation Date: 02/12/2014
-- Created by: Dan Flynn, Sr. DBA
--
-------------------------------------------------------------------
CREATE TABLE [dbo].[Nationality]
(
[NationalityID] [int] IDENTITY(1,1) NOT NULL,
[Country] [nvarchar](50) NULL,
[Abbreviation] [nvarchar](5) NULL,
[Adjective] [nvarchar] (130) NULL,
[Person] [nvarchar] (60) NULL
) ON [PRIMARY]
GO
-------------------------------------------------------------------------------
-- INSERT VALUES
-------------------------------------------------------------------------------
INSERT INTO [dbo].[Nationality](Country, Abbreviation, Adjective, Person )
VALUES ( 'AMERICAN - USA','US','US (used attributively only, as in US aggression but not He is US)','a US citizen' ),
( 'ARGENTINA','AR','Argentinian','an Argentinian' ),
( 'AUSTRALIA','AU','Australian','an Australian' ),
( 'BAHAMAS','BS','Bahamian','a Bahamian' ),
( 'BELGIUM','BE','Belgian','a Belgian' ),
GO
-------------------------------------------------------------------------------
-- ADD CLUSTERED INDEX
-------------------------------------------------------------------------------
CREATE CLUSTERED INDEX [idxNationality] ON [dbo].[Nationality]
(
[NationalityID] ASC,
[Country] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'TableDiscription', @value=N'CreatedBy: Dan Flynn, Sr. SQL Server DBA
CreationDate: 02/12/2014
Nationality table contains five columns, i.e.:
1. NationalityID, 2. Country, 3. Abbreviation, 4. Adjective, 5. Person
IDs 1 to 34 are alphabetical countries that are statistically the most popular as far as interaction with the United States. IDs 35 to 248 are also alphabetical for the rest of the countries.
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Nationality'
GO
有一个SQL标准,但没有人完全实现它。一些数据库系统(如PostgreSQL)更善于遵守标准,而其他数据库系统(如Microsoft SQL Server)则不然
这样做的结果是,您不能将在一个RDBMS上工作的SQL与另一个RDBMS一起使用。您必须将其转换为PostgreSQL方言。要将T-SQL转换为与Postres的SQL方言兼容,您可以使用以下步骤
“
”,但我强烈建议您完全避免使用带引号的标识符(因此不要在SQL中使用”
)GO
语句,并以结束语句代码>(也适用于SQL Server)
[dbo]。
如果您没有在Postgres中创建架构前缀(通常不创建)选项,它在Postgres中不需要(相当于定义一个表空间,但在Postgres中几乎不需要)
IF
,要有条件地删除表,请使用drop table IF EXISTS…
李>
WITH
关键字引入的所有选项即可identity(x,y)
需要用始终作为identity生成的标准SQL替换
nvarchar
类型,只需将所有内容都设置为varchar
,并确保您的数据库是使用可以存储多字节字符的编码创建的(默认情况下,它是UTF-8,所以应该可以)snake\u case
标识符,而不是CamelCase
DROP TABLE IF EXISTS Nationality CASCADE;
CREATE TABLE nationality
(
Nationality_id int generated always as IDENTITY NOT NULL,
Country varchar(50) NULL,
Abbreviation varchar(5) NULL,
Adjective varchar (130) NULL,
Person varchar (60) NULL
);
INSERT INTO Nationality (Country, Abbreviation, Adjective, Person )
VALUES ( 'AMERICAN - USA','US','US (used attributively only, as in US aggression but not He is US)','a US citizen' ),
( 'ARGENTINA','AR','Argentinian','an Argentinian' ),
( 'AUSTRALIA','AU','Australian','an Australian' ),
( 'BAHAMAS','BS','Bahamian','a Bahamian' ),
( 'BELGIUM','BE','Belgian','a Belgian' );
CREATE INDEX idx_Nationality ON Nationality
(
Nationality_ID ASC,
Country ASC
);
comment on table nationality is 'CreatedBy: Dan Flynn, Sr. SQL Server DBA
CreationDate: 02/12/2014
Nationality table contains five columns, i.e.:
1. NationalityID, 2. Country, 3. Abbreviation, 4. Adjective, 5. Person
IDs 1 to 34 are alphabetical countries that are statistically the most popular as far as interaction with the United States. IDs 35 to 248 are also alphabetical for the rest of the countries.
';
我有点惊讶,没有定义主键。您可能需要添加:
alter table nationality
add primary key (nationality_id);
[dbo]
是什么意思?这看起来像是sql server语法,在Postgres中不起作用。我希望您不要真的使用Postgres 9.3-它是。如果你真的这样做了,你应该升级到一个受支持的版本(例如11或12),现在我要做的是将行粘贴到一个txt文件中,删除引号和括号,并在数据库中为每一行迭代创建一个Nationary对象,但这就是我想要的答案。